]> git.proxmox.com Git - cargo.git/blob - src/doc/src/reference/config.md
Auto merge of #10165 - Aaron1011:stabilize-future-incompat, r=ehuss
[cargo.git] / src / doc / src / reference / config.md
1 ## Configuration
2
3 This document explains how Cargo’s configuration system works, as well as
4 available keys or configuration. For configuration of a package through its
5 manifest, see the [manifest format](manifest.md).
6
7 ### Hierarchical structure
8
9 Cargo allows local configuration for a particular package as well as global
10 configuration. It looks for configuration files in the current directory and
11 all parent directories. If, for example, Cargo were invoked in
12 `/projects/foo/bar/baz`, then the following configuration files would be
13 probed for and unified in this order:
14
15 * `/projects/foo/bar/baz/.cargo/config.toml`
16 * `/projects/foo/bar/.cargo/config.toml`
17 * `/projects/foo/.cargo/config.toml`
18 * `/projects/.cargo/config.toml`
19 * `/.cargo/config.toml`
20 * `$CARGO_HOME/config.toml` which defaults to:
21 * Windows: `%USERPROFILE%\.cargo\config.toml`
22 * Unix: `$HOME/.cargo/config.toml`
23
24 With this structure, you can specify configuration per-package, and even
25 possibly check it into version control. You can also specify personal defaults
26 with a configuration file in your home directory.
27
28 If a key is specified in multiple config files, the values will get merged
29 together. Numbers, strings, and booleans will use the value in the deeper
30 config directory taking precedence over ancestor directories, where the
31 home directory is the lowest priority. Arrays will be joined together.
32
33 At present, when being invoked from a workspace, Cargo does not read config
34 files from crates within the workspace. i.e. if a workspace has two crates in
35 it, named `/projects/foo/bar/baz/mylib` and `/projects/foo/bar/baz/mybin`, and
36 there are Cargo configs at `/projects/foo/bar/baz/mylib/.cargo/config.toml`
37 and `/projects/foo/bar/baz/mybin/.cargo/config.toml`, Cargo does not read
38 those configuration files if it is invoked from the workspace root
39 (`/projects/foo/bar/baz/`).
40
41 > **Note:** Cargo also reads config files without the `.toml` extension, such as
42 > `.cargo/config`. Support for the `.toml` extension was added in version 1.39
43 > and is the preferred form. If both files exist, Cargo will use the file
44 > without the extension.
45
46 ### Configuration format
47
48 Configuration files are written in the [TOML format][toml] (like the
49 manifest), with simple key-value pairs inside of sections (tables). The
50 following is a quick overview of all settings, with detailed descriptions
51 found below.
52
53 ```toml
54 paths = ["/path/to/override"] # path dependency overrides
55
56 [alias] # command aliases
57 b = "build"
58 c = "check"
59 t = "test"
60 r = "run"
61 rr = "run --release"
62 space_example = ["run", "--release", "--", "\"command list\""]
63
64 [build]
65 jobs = 1 # number of parallel jobs, defaults to # of CPUs
66 rustc = "rustc" # the rust compiler tool
67 rustc-wrapper = "…" # run this wrapper instead of `rustc`
68 rustc-workspace-wrapper = "…" # run this wrapper instead of `rustc` for workspace members
69 rustdoc = "rustdoc" # the doc generator tool
70 target = "triple" # build for the target triple (ignored by `cargo install`)
71 target-dir = "target" # path of where to place all generated artifacts
72 rustflags = ["…", "…"] # custom flags to pass to all compiler invocations
73 rustdocflags = ["…", "…"] # custom flags to pass to rustdoc
74 incremental = true # whether or not to enable incremental compilation
75 dep-info-basedir = "…" # path for the base directory for targets in depfiles
76 pipelining = true # rustc pipelining
77
78 [doc]
79 browser = "chromium" # browser to use with `cargo doc --open`,
80 # overrides the `BROWSER` environment variable
81
82 [env]
83 # Set ENV_VAR_NAME=value for any process run by Cargo
84 ENV_VAR_NAME = "value"
85 # Set even if already present in environment
86 ENV_VAR_NAME_2 = { value = "value", force = true }
87 # Value is relative to .cargo directory containing `config.toml`, make absolute
88 ENV_VAR_NAME_3 = { value = "relative/path", relative = true }
89
90 [future-incompat-report]
91 frequency = 'always' # when to display a notification about a future incompat report
92
93 [cargo-new]
94 vcs = "none" # VCS to use ('git', 'hg', 'pijul', 'fossil', 'none')
95
96 [http]
97 debug = false # HTTP debugging
98 proxy = "host:port" # HTTP proxy in libcurl format
99 ssl-version = "tlsv1.3" # TLS version to use
100 ssl-version.max = "tlsv1.3" # maximum TLS version
101 ssl-version.min = "tlsv1.1" # minimum TLS version
102 timeout = 30 # timeout for each HTTP request, in seconds
103 low-speed-limit = 10 # network timeout threshold (bytes/sec)
104 cainfo = "cert.pem" # path to Certificate Authority (CA) bundle
105 check-revoke = true # check for SSL certificate revocation
106 multiplexing = true # HTTP/2 multiplexing
107 user-agent = "…" # the user-agent header
108
109 [install]
110 root = "/some/path" # `cargo install` destination directory
111
112 [net]
113 retry = 2 # network retries
114 git-fetch-with-cli = true # use the `git` executable for git operations
115 offline = true # do not access the network
116
117 [patch.<registry>]
118 # Same keys as for [patch] in Cargo.toml
119
120 [profile.<name>] # Modify profile settings via config.
121 opt-level = 0 # Optimization level.
122 debug = true # Include debug info.
123 split-debuginfo = '...' # Debug info splitting behavior.
124 debug-assertions = true # Enables debug assertions.
125 overflow-checks = true # Enables runtime integer overflow checks.
126 lto = false # Sets link-time optimization.
127 panic = 'unwind' # The panic strategy.
128 incremental = true # Incremental compilation.
129 codegen-units = 16 # Number of code generation units.
130 rpath = false # Sets the rpath linking option.
131 [profile.<name>.build-override] # Overrides build-script settings.
132 # Same keys for a normal profile.
133 [profile.<name>.package.<name>] # Override profile for a package.
134 # Same keys for a normal profile (minus `panic`, `lto`, and `rpath`).
135
136 [registries.<name>] # registries other than crates.io
137 index = "…" # URL of the registry index
138 token = "…" # authentication token for the registry
139
140 [registry]
141 default = "…" # name of the default registry
142 token = "…" # authentication token for crates.io
143
144 [source.<name>] # source definition and replacement
145 replace-with = "…" # replace this source with the given named source
146 directory = "…" # path to a directory source
147 registry = "…" # URL to a registry source
148 local-registry = "…" # path to a local registry source
149 git = "…" # URL of a git repository source
150 branch = "…" # branch name for the git repository
151 tag = "…" # tag name for the git repository
152 rev = "…" # revision for the git repository
153
154 [target.<triple>]
155 linker = "…" # linker to use
156 runner = "…" # wrapper to run executables
157 rustflags = ["…", "…"] # custom flags for `rustc`
158
159 [target.<cfg>]
160 runner = "…" # wrapper to run executables
161 rustflags = ["…", "…"] # custom flags for `rustc`
162
163 [target.<triple>.<links>] # `links` build script override
164 rustc-link-lib = ["foo"]
165 rustc-link-search = ["/path/to/foo"]
166 rustc-flags = ["-L", "/some/path"]
167 rustc-cfg = ['key="value"']
168 rustc-env = {key = "value"}
169 rustc-cdylib-link-arg = ["…"]
170 metadata_key1 = "value"
171 metadata_key2 = "value"
172
173 [term]
174 verbose = false # whether cargo provides verbose output
175 color = 'auto' # whether cargo colorizes output
176 progress.when = 'auto' # whether cargo shows progress bar
177 progress.width = 80 # width of progress bar
178 ```
179
180 ### Environment variables
181
182 Cargo can also be configured through environment variables in addition to the
183 TOML configuration files. For each configuration key of the form `foo.bar` the
184 environment variable `CARGO_FOO_BAR` can also be used to define the value.
185 Keys are converted to uppercase, dots and dashes are converted to underscores.
186 For example the `target.x86_64-unknown-linux-gnu.runner` key can also be
187 defined by the `CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER` environment
188 variable.
189
190 Environment variables will take precedence over TOML configuration files.
191 Currently only integer, boolean, string and some array values are supported to
192 be defined by environment variables. Descriptions below indicate which keys
193 support environment variables.
194
195 In addition to the system above, Cargo recognizes a few other specific
196 [environment variables][env].
197
198 ### Config-relative paths
199
200 Paths in config files may be absolute, relative, or a bare name without any
201 path separators. Paths for executables without a path separator will use the
202 `PATH` environment variable to search for the executable. Paths for
203 non-executables will be relative to where the config value is defined. For
204 config files, that is relative to the parent directory of the `.cargo`
205 directory where the value was defined. For environment variables it is
206 relative to the current working directory.
207
208 ```toml
209 # Relative path examples.
210
211 [target.x86_64-unknown-linux-gnu]
212 runner = "foo" # Searches `PATH` for `foo`.
213
214 [source.vendored-sources]
215 # Directory is relative to the parent where `.cargo/config.toml` is located.
216 # For example, `/my/project/.cargo/config.toml` would result in `/my/project/vendor`.
217 directory = "vendor"
218 ```
219
220 ### Executable paths with arguments
221
222 Some Cargo commands invoke external programs, which can be configured as a path
223 and some number of arguments.
224
225 The value may be an array of strings like `['/path/to/program', 'somearg']` or
226 a space-separated string like `'/path/to/program somearg'`. If the path to the
227 executable contains a space, the list form must be used.
228
229 If Cargo is passing other arguments to the program such as a path to open or
230 run, they will be passed after the last specified argument in the value of an
231 option of this format. If the specified program does not have path separators,
232 Cargo will search `PATH` for its executable.
233
234 ### Credentials
235
236 Configuration values with sensitive information are stored in the
237 `$CARGO_HOME/credentials.toml` file. This file is automatically created and updated
238 by [`cargo login`]. It follows the same format as Cargo config files.
239
240 ```toml
241 [registry]
242 token = "…" # Access token for crates.io
243
244 [registries.<name>]
245 token = "…" # Access token for the named registry
246 ```
247
248 Tokens are used by some Cargo commands such as [`cargo publish`] for
249 authenticating with remote registries. Care should be taken to protect the
250 tokens and to keep them secret.
251
252 As with most other config values, tokens may be specified with environment
253 variables. The token for [crates.io] may be specified with the
254 `CARGO_REGISTRY_TOKEN` environment variable. Tokens for other registries may
255 be specified with environment variables of the form
256 `CARGO_REGISTRIES_<name>_TOKEN` where `<name>` is the name of the registry in
257 all capital letters.
258
259 ### Configuration keys
260
261 This section documents all configuration keys. The description for keys with
262 variable parts are annotated with angled brackets like `target.<triple>` where
263 the `<triple>` part can be any target triple like
264 `target.x86_64-pc-windows-msvc`.
265
266 #### `paths`
267 * Type: array of strings (paths)
268 * Default: none
269 * Environment: not supported
270
271 An array of paths to local packages which are to be used as overrides for
272 dependencies. For more information see the [Overriding Dependencies
273 guide](overriding-dependencies.md#paths-overrides).
274
275 #### `[alias]`
276 * Type: string or array of strings
277 * Default: see below
278 * Environment: `CARGO_ALIAS_<name>`
279
280 The `[alias]` table defines CLI command aliases. For example, running `cargo
281 b` is an alias for running `cargo build`. Each key in the table is the
282 subcommand, and the value is the actual command to run. The value may be an
283 array of strings, where the first element is the command and the following are
284 arguments. It may also be a string, which will be split on spaces into
285 subcommand and arguments. The following aliases are built-in to Cargo:
286
287 ```toml
288 [alias]
289 b = "build"
290 c = "check"
291 d = "doc"
292 t = "test"
293 r = "run"
294 ```
295
296 Aliases are not allowed to redefine existing built-in commands.
297
298 #### `[build]`
299
300 The `[build]` table controls build-time operations and compiler settings.
301
302 ##### `build.jobs`
303 * Type: integer
304 * Default: number of logical CPUs
305 * Environment: `CARGO_BUILD_JOBS`
306
307 Sets the maximum number of compiler processes to run in parallel.
308
309 Can be overridden with the `--jobs` CLI option.
310
311 ##### `build.rustc`
312 * Type: string (program path)
313 * Default: "rustc"
314 * Environment: `CARGO_BUILD_RUSTC` or `RUSTC`
315
316 Sets the executable to use for `rustc`.
317
318 ##### `build.rustc-wrapper`
319 * Type: string (program path)
320 * Default: none
321 * Environment: `CARGO_BUILD_RUSTC_WRAPPER` or `RUSTC_WRAPPER`
322
323 Sets a wrapper to execute instead of `rustc`. The first argument passed to the
324 wrapper is the path to the actual `rustc`.
325
326 ##### `build.rustc-workspace-wrapper`
327 * Type: string (program path)
328 * Default: none
329 * Environment: `CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER` or `RUSTC_WORKSPACE_WRAPPER`
330
331 Sets a wrapper to execute instead of `rustc`, for workspace members only.
332 The first argument passed to the wrapper is the path to the actual `rustc`.
333 It affects the filename hash so that artifacts produced by the wrapper are cached separately.
334
335 ##### `build.rustdoc`
336 * Type: string (program path)
337 * Default: "rustdoc"
338 * Environment: `CARGO_BUILD_RUSTDOC` or `RUSTDOC`
339
340 Sets the executable to use for `rustdoc`.
341
342 ##### `build.target`
343 * Type: string
344 * Default: host platform
345 * Environment: `CARGO_BUILD_TARGET`
346
347 The default target platform triple to compile to.
348
349 This may also be a relative path to a `.json` target spec file.
350
351 Can be overridden with the `--target` CLI option.
352
353 ##### `build.target-dir`
354 * Type: string (path)
355 * Default: "target"
356 * Environment: `CARGO_BUILD_TARGET_DIR` or `CARGO_TARGET_DIR`
357
358 The path to where all compiler output is placed. The default if not specified
359 is a directory named `target` located at the root of the workspace.
360
361 Can be overridden with the `--target-dir` CLI option.
362
363 ##### `build.rustflags`
364 * Type: string or array of strings
365 * Default: none
366 * Environment: `CARGO_BUILD_RUSTFLAGS` or `RUSTFLAGS`
367
368 Extra command-line flags to pass to `rustc`. The value may be a array of
369 strings or a space-separated string.
370
371 There are three mutually exclusive sources of extra flags. They are checked in
372 order, with the first one being used:
373
374 1. `RUSTFLAGS` environment variable.
375 2. All matching `target.<triple>.rustflags` and `target.<cfg>.rustflags`
376 config entries joined together.
377 3. `build.rustflags` config value.
378
379 Additional flags may also be passed with the [`cargo rustc`] command.
380
381 If the `--target` flag (or [`build.target`](#buildtarget)) is used, then the
382 flags will only be passed to the compiler for the target. Things being built
383 for the host, such as build scripts or proc macros, will not receive the args.
384 Without `--target`, the flags will be passed to all compiler invocations
385 (including build scripts and proc macros) because dependencies are shared. If
386 you have args that you do not want to pass to build scripts or proc macros and
387 are building for the host, pass `--target` with the host triple.
388
389 It is not recommended to pass in flags that Cargo itself usually manages. For
390 example, the flags driven by [profiles] are best handled by setting the
391 appropriate profile setting.
392
393 > **Caution**: Due to the low-level nature of passing flags directly to the
394 > compiler, this may cause a conflict with future versions of Cargo which may
395 > issue the same or similar flags on its own which may interfere with the
396 > flags you specify. This is an area where Cargo may not always be backwards
397 > compatible.
398
399 ##### `build.rustdocflags`
400 * Type: string or array of strings
401 * Default: none
402 * Environment: `CARGO_BUILD_RUSTDOCFLAGS` or `RUSTDOCFLAGS`
403
404 Extra command-line flags to pass to `rustdoc`. The value may be a array of
405 strings or a space-separated string.
406
407 There are two mutually exclusive sources of extra flags. They are checked in
408 order, with the first one being used:
409
410 1. `RUSTDOCFLAGS` environment variable.
411 2. `build.rustdocflags` config value.
412
413 Additional flags may also be passed with the [`cargo rustdoc`] command.
414
415 ##### `build.incremental`
416 * Type: bool
417 * Default: from profile
418 * Environment: `CARGO_BUILD_INCREMENTAL` or `CARGO_INCREMENTAL`
419
420 Whether or not to perform [incremental compilation]. The default if not set is
421 to use the value from the [profile]. Otherwise this overrides the setting of
422 all profiles.
423
424 The `CARGO_INCREMENTAL` environment variable can be set to `1` to force enable
425 incremental compilation for all profiles, or `0` to disable it. This env var
426 overrides the config setting.
427
428 ##### `build.dep-info-basedir`
429 * Type: string (path)
430 * Default: none
431 * Environment: `CARGO_BUILD_DEP_INFO_BASEDIR`
432
433 Strips the given path prefix from [dep
434 info](../guide/build-cache.md#dep-info-files) file paths. This config setting
435 is intended to convert absolute paths to relative paths for tools that require
436 relative paths.
437
438 The setting itself is a config-relative path. So, for example, a value of
439 `"."` would strip all paths starting with the parent directory of the `.cargo`
440 directory.
441
442 ##### `build.pipelining`
443 * Type: boolean
444 * Default: true
445 * Environment: `CARGO_BUILD_PIPELINING`
446
447 Controls whether or not build pipelining is used. This allows Cargo to
448 schedule overlapping invocations of `rustc` in parallel when possible.
449
450 #### `[doc]`
451
452 The `[doc]` table defines options for the [`cargo doc`] command.
453
454 ##### `doc.browser`
455
456 * Type: string or array of strings ([program path and args])
457 * Default: `BROWSER` environment variable, or, if that is missing,
458 opening the link in a system specific way
459
460 This option sets the browser to be used by [`cargo doc`], overriding the
461 `BROWSER` environment variable when opening documentation with the `--open`
462 option.
463
464 #### `[cargo-new]`
465
466 The `[cargo-new]` table defines defaults for the [`cargo new`] command.
467
468 ##### `cargo-new.name`
469
470 This option is deprecated and unused.
471
472 ##### `cargo-new.email`
473
474 This option is deprecated and unused.
475
476 ##### `cargo-new.vcs`
477 * Type: string
478 * Default: "git" or "none"
479 * Environment: `CARGO_CARGO_NEW_VCS`
480
481 Specifies the source control system to use for initializing a new repository.
482 Valid values are `git`, `hg` (for Mercurial), `pijul`, `fossil` or `none` to
483 disable this behavior. Defaults to `git`, or `none` if already inside a VCS
484 repository. Can be overridden with the `--vcs` CLI option.
485
486 ### `[env]`
487
488 The `[env]` section allows you to set additional environment variables for
489 build scripts, rustc invocations, `cargo run` and `cargo build`.
490
491 ```toml
492 [env]
493 OPENSSL_DIR = "/opt/openssl"
494 ```
495
496 By default, the variables specified will not override values that already exist
497 in the environment. This behavior can be changed by setting the `force` flag.
498
499 Setting the `relative` flag evaluates the value as a config-relative path that
500 is relative to the parent directory of the `.cargo` directory that contains the
501 `config.toml` file. The value of the environment variable will be the full
502 absolute path.
503
504 ```toml
505 [env]
506 TMPDIR = { value = "/home/tmp", force = true }
507 OPENSSL_DIR = { value = "vendor/openssl", relative = true }
508 ```
509
510 ### `[future-incompat-report]`
511
512 The `[future-incompat-report]` table controls setting for [future incompat reporting](future-incompat-report.md)
513
514 #### `future-incompat-report.frequency`
515 * Type: string
516 * Default: "always"
517 * Environment: `CARGO_FUTURE_INCOMPAT_REPORT_FREQUENCY`
518
519 Controls how often we display a notification to the terminal when a future incompat report is available. Possible values:
520
521 * `always` (default): Always display a notification when a command (e.g. `cargo build`) produces a future incompat report
522 * `never`: Never display a notification
523
524 #### `[http]`
525
526 The `[http]` table defines settings for HTTP behavior. This includes fetching
527 crate dependencies and accessing remote git repositories.
528
529 ##### `http.debug`
530 * Type: boolean
531 * Default: false
532 * Environment: `CARGO_HTTP_DEBUG`
533
534 If `true`, enables debugging of HTTP requests. The debug information can be
535 seen by setting the `CARGO_LOG=cargo::ops::registry=debug` environment
536 variable (or use `trace` for even more information).
537
538 Be wary when posting logs from this output in a public location. The output
539 may include headers with authentication tokens which you don't want to leak!
540 Be sure to review logs before posting them.
541
542 ##### `http.proxy`
543 * Type: string
544 * Default: none
545 * Environment: `CARGO_HTTP_PROXY` or `HTTPS_PROXY` or `https_proxy` or `http_proxy`
546
547 Sets an HTTP and HTTPS proxy to use. The format is in [libcurl format] as in
548 `[protocol://]host[:port]`. If not set, Cargo will also check the `http.proxy`
549 setting in your global git configuration. If none of those are set, the
550 `HTTPS_PROXY` or `https_proxy` environment variables set the proxy for HTTPS
551 requests, and `http_proxy` sets it for HTTP requests.
552
553 ##### `http.timeout`
554 * Type: integer
555 * Default: 30
556 * Environment: `CARGO_HTTP_TIMEOUT` or `HTTP_TIMEOUT`
557
558 Sets the timeout for each HTTP request, in seconds.
559
560 ##### `http.cainfo`
561 * Type: string (path)
562 * Default: none
563 * Environment: `CARGO_HTTP_CAINFO`
564
565 Path to a Certificate Authority (CA) bundle file, used to verify TLS
566 certificates. If not specified, Cargo attempts to use the system certificates.
567
568 ##### `http.check-revoke`
569 * Type: boolean
570 * Default: true (Windows) false (all others)
571 * Environment: `CARGO_HTTP_CHECK_REVOKE`
572
573 This determines whether or not TLS certificate revocation checks should be
574 performed. This only works on Windows.
575
576 ##### `http.ssl-version`
577 * Type: string or min/max table
578 * Default: none
579 * Environment: `CARGO_HTTP_SSL_VERSION`
580
581 This sets the minimum TLS version to use. It takes a string, with one of the
582 possible values of "default", "tlsv1", "tlsv1.0", "tlsv1.1", "tlsv1.2", or
583 "tlsv1.3".
584
585 This may alternatively take a table with two keys, `min` and `max`, which each
586 take a string value of the same kind that specifies the minimum and maximum
587 range of TLS versions to use.
588
589 The default is a minimum version of "tlsv1.0" and a max of the newest version
590 supported on your platform, typically "tlsv1.3".
591
592 ##### `http.low-speed-limit`
593 * Type: integer
594 * Default: 10
595 * Environment: `CARGO_HTTP_LOW_SPEED_LIMIT`
596
597 This setting controls timeout behavior for slow connections. If the average
598 transfer speed in bytes per second is below the given value for
599 [`http.timeout`](#httptimeout) seconds (default 30 seconds), then the
600 connection is considered too slow and Cargo will abort and retry.
601
602 ##### `http.multiplexing`
603 * Type: boolean
604 * Default: true
605 * Environment: `CARGO_HTTP_MULTIPLEXING`
606
607 When `true`, Cargo will attempt to use the HTTP2 protocol with multiplexing.
608 This allows multiple requests to use the same connection, usually improving
609 performance when fetching multiple files. If `false`, Cargo will use HTTP 1.1
610 without pipelining.
611
612 ##### `http.user-agent`
613 * Type: string
614 * Default: Cargo's version
615 * Environment: `CARGO_HTTP_USER_AGENT`
616
617 Specifies a custom user-agent header to use. The default if not specified is a
618 string that includes Cargo's version.
619
620 #### `[install]`
621
622 The `[install]` table defines defaults for the [`cargo install`] command.
623
624 ##### `install.root`
625 * Type: string (path)
626 * Default: Cargo's home directory
627 * Environment: `CARGO_INSTALL_ROOT`
628
629 Sets the path to the root directory for installing executables for [`cargo
630 install`]. Executables go into a `bin` directory underneath the root.
631
632 To track information of installed executables, some extra files, such as
633 `.crates.toml` and `.crates2.json`, are also created under this root.
634
635 The default if not specified is Cargo's home directory (default `.cargo` in
636 your home directory).
637
638 Can be overridden with the `--root` command-line option.
639
640 #### `[net]`
641
642 The `[net]` table controls networking configuration.
643
644 ##### `net.retry`
645 * Type: integer
646 * Default: 2
647 * Environment: `CARGO_NET_RETRY`
648
649 Number of times to retry possibly spurious network errors.
650
651 ##### `net.git-fetch-with-cli`
652 * Type: boolean
653 * Default: false
654 * Environment: `CARGO_NET_GIT_FETCH_WITH_CLI`
655
656 If this is `true`, then Cargo will use the `git` executable to fetch registry
657 indexes and git dependencies. If `false`, then it uses a built-in `git`
658 library.
659
660 Setting this to `true` can be helpful if you have special authentication
661 requirements that Cargo does not support. See [Git
662 Authentication](../appendix/git-authentication.md) for more information about
663 setting up git authentication.
664
665 ##### `net.offline`
666 * Type: boolean
667 * Default: false
668 * Environment: `CARGO_NET_OFFLINE`
669
670 If this is `true`, then Cargo will avoid accessing the network, and attempt to
671 proceed with locally cached data. If `false`, Cargo will access the network as
672 needed, and generate an error if it encounters a network error.
673
674 Can be overridden with the `--offline` command-line option.
675
676 #### `[patch]`
677
678 Just as you can override dependencies using [`[patch]` in
679 `Cargo.toml`](overriding-dependencies.md#the-patch-section), you can
680 override them in the cargo configuration file to apply those patches to
681 any affected build. The format is identical to the one used in
682 `Cargo.toml`.
683
684 Since `.cargo/config.toml` files are not usually checked into source
685 control, you should prefer patching using `Cargo.toml` where possible to
686 ensure that other developers can compile your crate in their own
687 environments. Patching through cargo configuration files is generally
688 only appropriate when the patch section is automatically generated by an
689 external build tool.
690
691 If a given dependency is patched both in a cargo configuration file and
692 a `Cargo.toml` file, the patch in the configuration file is used. If
693 multiple configuration files patch the same dependency, standard cargo
694 configuration merging is used, which prefers the value defined closest
695 to the current directory, with `$HOME/.cargo/config.toml` taking the
696 lowest precedence.
697
698 Relative `path` dependencies in such a `[patch]` section are resolved
699 relative to the configuration file they appear in.
700
701 #### `[profile]`
702
703 The `[profile]` table can be used to globally change profile settings, and
704 override settings specified in `Cargo.toml`. It has the same syntax and
705 options as profiles specified in `Cargo.toml`. See the [Profiles chapter] for
706 details about the options.
707
708 [Profiles chapter]: profiles.md
709
710 ##### `[profile.<name>.build-override]`
711 * Environment: `CARGO_PROFILE_<name>_BUILD_OVERRIDE_<key>`
712
713 The build-override table overrides settings for build scripts, proc macros,
714 and their dependencies. It has the same keys as a normal profile. See the
715 [overrides section](profiles.md#overrides) for more details.
716
717 ##### `[profile.<name>.package.<name>]`
718 * Environment: not supported
719
720 The package table overrides settings for specific packages. It has the same
721 keys as a normal profile, minus the `panic`, `lto`, and `rpath` settings. See
722 the [overrides section](profiles.md#overrides) for more details.
723
724 ##### `profile.<name>.codegen-units`
725 * Type: integer
726 * Default: See profile docs.
727 * Environment: `CARGO_PROFILE_<name>_CODEGEN_UNITS`
728
729 See [codegen-units](profiles.md#codegen-units).
730
731 ##### `profile.<name>.debug`
732 * Type: integer or boolean
733 * Default: See profile docs.
734 * Environment: `CARGO_PROFILE_<name>_DEBUG`
735
736 See [debug](profiles.md#debug).
737
738 ##### `profile.<name>.split-debuginfo`
739 * Type: string
740 * Default: See profile docs.
741 * Environment: `CARGO_PROFILE_<name>_SPLIT_DEBUGINFO`
742
743 See [split-debuginfo](profiles.md#split-debuginfo).
744
745 ##### `profile.<name>.debug-assertions`
746 * Type: boolean
747 * Default: See profile docs.
748 * Environment: `CARGO_PROFILE_<name>_DEBUG_ASSERTIONS`
749
750 See [debug-assertions](profiles.md#debug-assertions).
751
752 ##### `profile.<name>.incremental`
753 * Type: boolean
754 * Default: See profile docs.
755 * Environment: `CARGO_PROFILE_<name>_INCREMENTAL`
756
757 See [incremental](profiles.md#incremental).
758
759 ##### `profile.<name>.lto`
760 * Type: string or boolean
761 * Default: See profile docs.
762 * Environment: `CARGO_PROFILE_<name>_LTO`
763
764 See [lto](profiles.md#lto).
765
766 ##### `profile.<name>.overflow-checks`
767 * Type: boolean
768 * Default: See profile docs.
769 * Environment: `CARGO_PROFILE_<name>_OVERFLOW_CHECKS`
770
771 See [overflow-checks](profiles.md#overflow-checks).
772
773 ##### `profile.<name>.opt-level`
774 * Type: integer or string
775 * Default: See profile docs.
776 * Environment: `CARGO_PROFILE_<name>_OPT_LEVEL`
777
778 See [opt-level](profiles.md#opt-level).
779
780 ##### `profile.<name>.panic`
781 * Type: string
782 * default: See profile docs.
783 * Environment: `CARGO_PROFILE_<name>_PANIC`
784
785 See [panic](profiles.md#panic).
786
787 ##### `profile.<name>.rpath`
788 * Type: boolean
789 * default: See profile docs.
790 * Environment: `CARGO_PROFILE_<name>_RPATH`
791
792 See [rpath](profiles.md#rpath).
793
794
795 #### `[registries]`
796
797 The `[registries]` table is used for specifying additional [registries]. It
798 consists of a sub-table for each named registry.
799
800 ##### `registries.<name>.index`
801 * Type: string (url)
802 * Default: none
803 * Environment: `CARGO_REGISTRIES_<name>_INDEX`
804
805 Specifies the URL of the git index for the registry.
806
807 ##### `registries.<name>.token`
808 * Type: string
809 * Default: none
810 * Environment: `CARGO_REGISTRIES_<name>_TOKEN`
811
812 Specifies the authentication token for the given registry. This value should
813 only appear in the [credentials](#credentials) file. This is used for registry
814 commands like [`cargo publish`] that require authentication.
815
816 Can be overridden with the `--token` command-line option.
817
818 #### `[registry]`
819
820 The `[registry]` table controls the default registry used when one is not
821 specified.
822
823 ##### `registry.index`
824
825 This value is no longer accepted and should not be used.
826
827 ##### `registry.default`
828 * Type: string
829 * Default: `"crates-io"`
830 * Environment: `CARGO_REGISTRY_DEFAULT`
831
832 The name of the registry (from the [`registries` table](#registries)) to use
833 by default for registry commands like [`cargo publish`].
834
835 Can be overridden with the `--registry` command-line option.
836
837 ##### `registry.token`
838 * Type: string
839 * Default: none
840 * Environment: `CARGO_REGISTRY_TOKEN`
841
842 Specifies the authentication token for [crates.io]. This value should only
843 appear in the [credentials](#credentials) file. This is used for registry
844 commands like [`cargo publish`] that require authentication.
845
846 Can be overridden with the `--token` command-line option.
847
848 #### `[source]`
849
850 The `[source]` table defines the registry sources available. See [Source
851 Replacement] for more information. It consists of a sub-table for each named
852 source. A source should only define one kind (directory, registry,
853 local-registry, or git).
854
855 ##### `source.<name>.replace-with`
856 * Type: string
857 * Default: none
858 * Environment: not supported
859
860 If set, replace this source with the given named source.
861
862 ##### `source.<name>.directory`
863 * Type: string (path)
864 * Default: none
865 * Environment: not supported
866
867 Sets the path to a directory to use as a directory source.
868
869 ##### `source.<name>.registry`
870 * Type: string (url)
871 * Default: none
872 * Environment: not supported
873
874 Sets the URL to use for a registry source.
875
876 ##### `source.<name>.local-registry`
877 * Type: string (path)
878 * Default: none
879 * Environment: not supported
880
881 Sets the path to a directory to use as a local registry source.
882
883 ##### `source.<name>.git`
884 * Type: string (url)
885 * Default: none
886 * Environment: not supported
887
888 Sets the URL to use for a git repository source.
889
890 ##### `source.<name>.branch`
891 * Type: string
892 * Default: none
893 * Environment: not supported
894
895 Sets the branch name to use for a git repository.
896
897 If none of `branch`, `tag`, or `rev` is set, defaults to the `master` branch.
898
899 ##### `source.<name>.tag`
900 * Type: string
901 * Default: none
902 * Environment: not supported
903
904 Sets the tag name to use for a git repository.
905
906 If none of `branch`, `tag`, or `rev` is set, defaults to the `master` branch.
907
908 ##### `source.<name>.rev`
909 * Type: string
910 * Default: none
911 * Environment: not supported
912
913 Sets the [revision] to use for a git repository.
914
915 If none of `branch`, `tag`, or `rev` is set, defaults to the `master` branch.
916
917
918 #### `[target]`
919
920 The `[target]` table is used for specifying settings for specific platform
921 targets. It consists of a sub-table which is either a platform triple or a
922 [`cfg()` expression]. The given values will be used if the target platform
923 matches either the `<triple>` value or the `<cfg>` expression.
924
925 ```toml
926 [target.thumbv7m-none-eabi]
927 linker = "arm-none-eabi-gcc"
928 runner = "my-emulator"
929 rustflags = ["…", "…"]
930
931 [target.'cfg(all(target_arch = "arm", target_os = "none"))']
932 runner = "my-arm-wrapper"
933 rustflags = ["…", "…"]
934 ```
935
936 `cfg` values come from those built-in to the compiler (run `rustc --print=cfg`
937 to view), values set by [build scripts], and extra `--cfg` flags passed to
938 `rustc` (such as those defined in `RUSTFLAGS`). Do not try to match on
939 `debug_assertions` or Cargo features like `feature="foo"`.
940
941 If using a target spec JSON file, the `<triple>` value is the filename stem.
942 For example `--target foo/bar.json` would match `[target.bar]`.
943
944 ##### `target.<triple>.ar`
945
946 This option is deprecated and unused.
947
948 ##### `target.<triple>.linker`
949 * Type: string (program path)
950 * Default: none
951 * Environment: `CARGO_TARGET_<triple>_LINKER`
952
953 Specifies the linker which is passed to `rustc` (via [`-C linker`]) when the
954 `<triple>` is being compiled for. By default, the linker is not overridden.
955
956 ##### `target.<triple>.runner`
957 * Type: string or array of strings ([program path and args])
958 * Default: none
959 * Environment: `CARGO_TARGET_<triple>_RUNNER`
960
961 If a runner is provided, executables for the target `<triple>` will be
962 executed by invoking the specified runner with the actual executable passed as
963 an argument. This applies to [`cargo run`], [`cargo test`] and [`cargo bench`]
964 commands. By default, compiled executables are executed directly.
965
966 ##### `target.<cfg>.runner`
967
968 This is similar to the [target runner](#targettriplerunner), but using
969 a [`cfg()` expression]. If both a `<triple>` and `<cfg>` runner match,
970 the `<triple>` will take precedence. It is an error if more than one
971 `<cfg>` runner matches the current target.
972
973 ##### `target.<triple>.rustflags`
974 * Type: string or array of strings
975 * Default: none
976 * Environment: `CARGO_TARGET_<triple>_RUSTFLAGS`
977
978 Passes a set of custom flags to the compiler for this `<triple>`. The value
979 may be a array of strings or a space-separated string.
980
981 See [`build.rustflags`](#buildrustflags) for more details on the different
982 ways to specific extra flags.
983
984 ##### `target.<cfg>.rustflags`
985
986 This is similar to the [target rustflags](#targettriplerustflags), but
987 using a [`cfg()` expression]. If several `<cfg>` and `<triple>` entries
988 match the current target, the flags are joined together.
989
990 ##### `target.<triple>.<links>`
991
992 The links sub-table provides a way to [override a build script]. When
993 specified, the build script for the given `links` library will not be
994 run, and the given values will be used instead.
995
996 ```toml
997 [target.x86_64-unknown-linux-gnu.foo]
998 rustc-link-lib = ["foo"]
999 rustc-link-search = ["/path/to/foo"]
1000 rustc-flags = "-L /some/path"
1001 rustc-cfg = ['key="value"']
1002 rustc-env = {key = "value"}
1003 rustc-cdylib-link-arg = ["…"]
1004 metadata_key1 = "value"
1005 metadata_key2 = "value"
1006 ```
1007
1008 #### `[term]`
1009
1010 The `[term]` table controls terminal output and interaction.
1011
1012 ##### `term.verbose`
1013 * Type: boolean
1014 * Default: false
1015 * Environment: `CARGO_TERM_VERBOSE`
1016
1017 Controls whether or not extra detailed messages are displayed by Cargo.
1018
1019 Specifying the `--quiet` flag will override and disable verbose output.
1020 Specifying the `--verbose` flag will override and force verbose output.
1021
1022 ##### `term.color`
1023 * Type: string
1024 * Default: "auto"
1025 * Environment: `CARGO_TERM_COLOR`
1026
1027 Controls whether or not colored output is used in the terminal. Possible values:
1028
1029 * `auto` (default): Automatically detect if color support is available on the
1030 terminal.
1031 * `always`: Always display colors.
1032 * `never`: Never display colors.
1033
1034 Can be overridden with the `--color` command-line option.
1035
1036 ##### `term.progress.when`
1037 * Type: string
1038 * Default: "auto"
1039 * Environment: `CARGO_TERM_PROGRESS_WHEN`
1040
1041 Controls whether or not progress bar is shown in the terminal. Possible values:
1042
1043 * `auto` (default): Intelligently guess whether to show progress bar.
1044 * `always`: Always show progress bar.
1045 * `never`: Never show progress bar.
1046
1047 ##### `term.progress.width`
1048 * Type: integer
1049 * Default: none
1050 * Environment: `CARGO_TERM_PROGRESS_WIDTH`
1051
1052 Sets the width for progress bar.
1053
1054 [`cargo bench`]: ../commands/cargo-bench.md
1055 [`cargo login`]: ../commands/cargo-login.md
1056 [`cargo doc`]: ../commands/cargo-doc.md
1057 [`cargo new`]: ../commands/cargo-new.md
1058 [`cargo publish`]: ../commands/cargo-publish.md
1059 [`cargo run`]: ../commands/cargo-run.md
1060 [`cargo rustc`]: ../commands/cargo-rustc.md
1061 [`cargo test`]: ../commands/cargo-test.md
1062 [`cargo rustdoc`]: ../commands/cargo-rustdoc.md
1063 [`cargo install`]: ../commands/cargo-install.md
1064 [env]: environment-variables.md
1065 [`cfg()` expression]: ../../reference/conditional-compilation.html
1066 [build scripts]: build-scripts.md
1067 [`-C linker`]: ../../rustc/codegen-options/index.md#linker
1068 [override a build script]: build-scripts.md#overriding-build-scripts
1069 [toml]: https://toml.io/
1070 [incremental compilation]: profiles.md#incremental
1071 [profile]: profiles.md
1072 [program path with args]: #executable-paths-with-arguments
1073 [libcurl format]: https://ec.haxx.se/usingcurl-proxies.html
1074 [source replacement]: source-replacement.md
1075 [revision]: https://git-scm.com/docs/gitrevisions
1076 [registries]: registries.md
1077 [crates.io]: https://crates.io/