PackageTrack
Sign in Get early access

config

Layered configuration system for Rust applications.

0.15.25 108M downloads/mo #768 most downloaded on crates.io rust-cli/config-rs

What this package is like to depend on

Last release 1 months ago

26 Jun 2026

Release timing varies

gaps range from 8 days to 4 months

Most releases are documented

notes for 49 of 57 stable releases

Nothing withdrawn

no release was ever pulled

11 years old

57 releases · first in 2015

11 releases in the last 12 months

see the full history below

Release timeline

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

Releases

latest 57
  1. 0.15.25 26 Jun 2026
    Release notes

    chore: Release config version 0.15.25

    Open source →
    Release notes

    Fixes

    • (ron) Support u64, and not just i64
    Open source →
  2. 0.15.24 16 Jun 2026
    Release notes

    chore: Release config version 0.15.24

    Open source →
    Release notes

    Fixes

    • (json) Support u64, and not just i64
    Open source →
  3. 0.15.23 14 May 2026
    Release notes

    chore: Release config version 0.15.23

    Open source →
    Release notes

    Fixes

    • Environment::convert_case: correctly apply casing to each key segment
    Open source →
  4. 0.15.22 17 Mar 2026
    Release notes

    chore: Release config version 0.15.22

    Open source →
    Release notes

    Documentation

    • Polish examples

    Internal

    • Update winnow
    Open source →
  5. 0.15.21 12 Mar 2026
    Release notes

    chore: Release config version 0.15.21

    Open source →
    Release notes

    Compatibility

    • Bump MSRV to 1.85
    Open source →
  6. 0.15.20 12 Mar 2026
    Release notes

    chore: Release config version 0.15.20

    Open source →
    Release notes

    Fixes

    • Serialize the full u64 range

    Internal

    • (toml) Update to 1.0
    Open source →
  7. 0.15.19 12 Nov 2025
    Release notes

    chore: Release config version 0.15.19

    Open source →
    Release notes

    Internal

    • (ron) Update to 0.12
    Open source →
  8. 0.15.18 30 Sep 2025
    Release notes

    chore: Release config version 0.15.18

    Open source →
    Release notes

    Fixes

    • Improve consistency between missing field error messages
    Open source →
  9. 0.15.17 24 Sep 2025
    Release notes

    chore: Release config version 0.15.17

    Open source →
    Release notes

    Features

    • corn file format support
    Open source →
  10. 0.15.16 15 Sep 2025
    Release notes

    chore: Release config version 0.15.16

    Open source →
    Release notes

    Performance

    • Allow more build parallelism by depending on serde_core
    Open source →
  11. 0.15.15 29 Aug 2025
    Release notes

    Fixes

    • (json5) Correctly deserialize null (regressed in 0.15.14)
    Open source →
  12. 0.15.14 12 Aug 2025
    Release notes

    Performance

    • (json5) Reduce overhead when loading json5 files
    Open source →
  13. 0.15.13 09 Jul 2025
    Release notes

    Fixes

    • Skip UTF-8 BOMs when reading files
    Open source →
  14. 0.15.12 08 Jul 2025
    Release notes

    Performance

    • Upgrade to toml v0.9
    Open source →
  15. 0.15.11 12 Mar 2025
    Release notes

    Features

    • Deserialize YAML real keys as strings
    Open source →
  16. 0.15.10 12 Mar 2025
    Release notes

    Features

    • Deserialize YAML boolean keys as strings

    Fixes

    • Don't panic on non-string YAML keys
    Open source →
  17. 0.15.9 04 Mar 2025
    Release notes

    Compatibility

    • Upgrade to yaml-rust2 0.10

    Documentation

    • Provided more jumping off points in the documentation
    Open source →
  18. 0.15.8 10 Feb 2025
    Release notes

    Fix

    • Don't panic on non-unicode env variable names and values
    Open source →
  19. 0.15.7 30 Jan 2025
    Release notes

    Internal

    • Update a dependency
    Open source →
  20. 0.15.6 14 Jan 2025
    Release notes

    Fixes

    • Fix regression from 0.15.3 with reading a table from an empty config
    Open source →
  21. 0.15.5 10 Jan 2025
    Release notes

    Fixes

    • Include the key on all serde errors

    Performance

    • Don't clone when merging sources
    Open source →
  22. 0.15.4 20 Dec 2024
    Release notes

    Performance

    • Reduce TOML build times
    Open source →
  23. 0.15.3 19 Dec 2024
    Release notes

    Internal

    • Clean ups
    Open source →
  24. 0.15.2 19 Dec 2024
    Release notes

    Fixes

    • Provide an error message on path parsing errors (regression from 0.15.0)
    • Improve quality of path parsing error messages
    Open source →
  25. 0.15.1 19 Dec 2024
    Release notes

    Fixes

    • Don't crash on get(arr[-1]) on empty arrays
    • Don't crash on set_override(arr[-1]) on empty arrays
    Open source →
  26. 0.15.0 17 Dec 2024
    Release notes

    Compatibility

    • ConfigError is no longer exhaustive
    • ConfigError::Parses type changed
    • FileFormat is no longer exhaustive
    • Deprecated functions removed
    • Case insensitivity from 0.14.0 was reverted

    Fixes

    • Struct fields, variants, and lookup paths with uppercase letters can be used again (regression from 0.14.0)
    Open source →
  27. 0.14.1 23 Oct 2024
    Release notes

    Compatibility

    • MSRV is now 1.75

    Internal

    • Remove dependency on lazy_static
    • Update rust-ini from 0.19 to 0.20
    • Switch from yaml-rust to yaml-rust2
    Open source →
  28. 0.14.0 01 Feb 2024
    Release notes

    This is a maintenance release, mostly to get some dependency updates out, but also with some fixes and changes that have piled up over a rather long time.

    Features

    • #100 Fix #99: expose file::source::FileSource
    • #318 Add Value::origin()
    • #379 Add clone to builder state types
    • #381 env: add a 'convert_case' field to ease dealing with kebab-case
    • #402 Gate async-traits behind a feature
    • #413 Attach key to type error generated from Config::get_<type>()
    • #480 Hide and deprecate AsyncConfigBuilder

    Fixes

    • #306 fix: dot in config name
    • #334 errors: clarify names of integer types
    • #343 fix yaml to parse int keys
    • #353 Use TryInto for more permissive deserialization for integers
    • #354 Fix uppercase lowercase issues
    • #374 Fix FIXME in de.rs and value.rs
    • #395 Fix: Do not use deprecated function
    • #429 Make the parse list key to lowercase when insert the keys
    • #465 Fix nested arrays (by reworking array handling)
    • #481 Fix docs warnings

    Dependency updates

    • #271 Update warp requirement from =0.3.1 to =0.3.2
    • #316 test: Adopt test-env to fix random test failure
    • #335 Update MSRV: 1.56.0 -> 1.56.1
    • #350 Bump actions/checkout from 2.4.0 to 3.0.2
    • #367 Update ron requirement from 0.7 to 0.8
    • #373 Update notify (4.0.0 -> 5.0.0)
    • #375 Update temp-env requirement from 0.2.0 to 0.3.0
    • #378 Update warp requirement from =0.3.2 to =0.3.3
    • #382 Bump actions/checkout from 3.0.2 to 3.1.0
    • #389 Update MSRV: 1.56.1 -> 1.59.0
    • #403 Bump actions/checkout from 3.1.0 to 3.2.0
    • #411 Bump actions/checkout from 3.2.0 to 3.3.0
    • #420 Update MSRV: 1.59.0 -> 1.60.0
    • #421 Update toml requirement from 0.5 to 0.7
    • #422 Update MSRV in cron workflow
    • #425 Bump actions/checkout from 3.3.0 to 3.4.0
    • #426 Update MSRV: 1.60.0 -> 1.64.0
    • #427 Bump actions/checkout from 3.4.0 to 3.5.0
    • #430 Update warp requirement from =0.3.3 to =0.3.4
    • #433 Bump actions/checkout from 3.5.0 to 3.5.1
    • #434 Bump actions/checkout from 3.5.1 to 3.5.2
    • #436 Update warp requirement from =0.3.4 to =0.3.5
    • #437 Update rust-ini requirement from 0.18 to 0.19
    • #438 Update notify requirement from ^5.0.0 to ^6.0.0
    • #440 Bump actions/checkout from 3.5.2 to 3.5.3
    • #441 Update indexmap requirement from 1.7.0 to 2.0.0
    • #451 Bump actions/checkout from 3.5.3 to 3.6.0
    • #453 Bump actions/checkout from 3.6.0 to 4.0.0
    • #455 MSRV: 1.64.0 -> 1.66.0
    • #456 Update toml requirement from 0.7 to 0.8
    • #458 Update MSRV in cron job
    • #459 Bump actions/checkout from 4.0.0 to 4.1.0
    • #462 Update warp requirement from =0.3.5 to =0.3.6
    • #477 Bump actions/checkout from 4.1.0 to 4.1.1
    • #483 Update MSRV: 1.66.0 -> 1.70.0
    • #503 Bump actions/setup-python from 4 to 5

    Misc

    • #188 Add test for log::Level deserialization
    • #274 move 'must_use' attribute to struct for 'builder' types
    • #283 Add cron job
    • #299 docs(builder): fix typo in doc comment
    • #344 Fix clippy: Derive Eq as well
    • #347 Fix clippy: use first() instead of get(0)
    • #348 actions: Remove "minimal" setting, as workflow does not support this key
    • #356 refactoring deserialize-any in config
    • #359 Add test to deserialize unsigned int
    • #360 Duplicate test for type conversion with unsigned int
    • #362 Run clippy only on MSRV
    • #363 Backport CHANGELOG entry for 0.13.2
    • #388 Add documentation to File required setter
    • #392 Add simple example using lazy_static
    • #393 More clippy fixes
    • #396 Replace actions rs
    • #401 Backport changelog
    • #404 Replace fixupmerge with gitlint
    • #406 Fix clippy: Remove unnecessary cast
    • #410 Copy member docs to builder functions
    • #416 Replace actions-rs with run scripts
    • #423 Fix clippy: Remove needless borrowed reference
    • #445 Update license field following SPDX 2.1 license expression standard
    • #460 Use weak features for preserve_order
    • #469 chore: Use a common method in parsers to check root is a table
    • #471 Clippy exact toolchains
    • #479 docs: Example for conditionally loading sources
    • #485 Add DCO
    • #488 Unify deser impl (redux)
    • #489 deserialize: strings: Introduce string_serialize_via_display macro
    • #507 Check external types
    • #511 Fix: cargo-check-external-types must use nightly 2023-10-10
    Open source →
  29. 0.13.4 22 Nov 2023

    Nothing published for this version

  30. 0.13.3 04 Dec 2022
    Release notes

    Please note that we had to update the MSRV for this crate from 1.56.0 to 1.59.0 for this patch release being possible, because a transitive dependency did update its MSRV.

    Open source →
  31. 0.13.2 02 Aug 2022
    Release notes
    • Backport of #316 to be testing with temp_env. The backport was necessary to be able to backport the next change. This change shouldn't be user-visible.
    • Backport of #353 to use TryInto for more permissive deserialization of integers
    • Backport of commit 518a3cafa1e62ba7405709e5c508247e328e0a18 from #362 to fix tests
    Open source →
  32. 0.13.1 13 Apr 2022
    Release notes
    • typo in doc comment for ConfigBuilder #299
    • dot in config file name handling fixed #306
    Open source →
  33. 0.13.0 03 Apr 2022
    Release notes
    • Prefix-Separator support was added #292
    • Environment lists can now be parsed #255
    • Setting an overwrite from an Option was added #303
    • Option to keep the prefix from an environment variable was added #298
    • Some small doc/CI fixes #307, #309
    • MSRV was updated to 1.56.0 #304
    • Dependencies were updated #289, #301
    Open source →
  34. 0.12.0 19 Feb 2022
    Release notes

    Format support changes in this version

    • HJSON support was removed #230
    • JSON5 format support #206
    • RON format support #202

    Other noteworthy changes

    • A new ConfigBuilder interface for building configuration objects #196
    • Asynchronous sources #207
    • Custom ENV separators are now supported #185
    • Loads of dependency updates and bugfixes of course
    • Preserved map order #217
    • Support for parsing numbers from the environment #137
    • Support for unsigned integers #178
    • Format trait for (custom) file formats #219

    Deprecated

    • Environment::new() - see #235
    • Large parts of the Config interface - see #196
      • Config::merge()
      • Config::with_merged()
      • Config::refresh()
      • Config::set_default()
      • Config::set()
      • Config::set_once()
      • Config::deserialize()
    Open source →
  35. 0.11.0 17 Mar 2021
    Release notes
    • The Config type got a builder-pattern with_merged() method #166.
    • A Config::set_once() function was added, to set an value that can be overwritten by Config::mergeing another configuration #172
    • serde_hjson is, if enabled, pulled in without default features. This is due to a bug in serde_hjson, see #169 for more information.
    • Testing is done on github actions #175
    Open source →
  36. 0.10.1 08 Dec 2019
    Release notes
    • Allow enums as configuration keys #119
    Open source →
  37. 0.10.0 08 Dec 2019
    Release notes
    • Remove lowercasing of keys (unless the key is coming from an environment variable).
    • Update nom to 5.x
    Open source →
  38. 0.9.3 09 May 2019
    Release notes
    • Support deserializing to a struct with #[serde(default)] #106
    Open source →
  39. 0.9.2 03 Jan 2019
    Release notes
    • Support reading enums from configuration. #85
    • Improvements to error path (attempting to propagate path). #89
    • Fix UB in monomorphic expansion. We weren't re-exporting dependent types. #91
    Open source →
  40. 0.9.1 26 Sep 2018
    Release notes
    • Allow Environment variable collection to ignore empty values. #78
      // Empty env variables will not be collected
      Environment::with_prefix("APP").ignore_empty(true)
      
    Open source →
  41. 0.9.0 02 Jul 2018
    Release notes
    • Breaking Change: Environment does not declare a separator by default.

      // 0.8.0
      Environment::with_prefix("APP")
      
      // 0.9.0
      Environment::with_prefix("APP").separator("_")
      
    • Add support for INI. #72

    • Add support for newtype structs. #71

    • Fix bug with array set by path. #69

    • Update to nom 4. #63

    Open source →
  42. 0.8.0 26 Jan 2018
    Release notes
    • Update lazy_static and yaml_rust
    Open source →
  43. 0.7.1 26 Jan 2018
    Release notes
    • Be compatible with nom's verbose_errors feature (#50)[https://github.com/rust-cli/config-rs/pull/50]
    • Add derive(PartialEq) for Value (#54)[https://github.com/rust-cli/config-rs/pull/54]
    Open source →
  44. 0.7.0 05 Aug 2017
    Release notes
    • Fix conflict with serde_yaml. #39
    • Implement Source for Config.

    • Implement serde::de::Deserializer for Config. my_config.deserialize may now be called as either Deserialize::deserialize(my_config) or my_config.try_into().

    • Remove ConfigResult. The builder pattern requires either .try_into as the final step or the initial Config::new() to be bound to a slot. Errors must also be handled on each call instead of at the end of the chain.

      let mut c = Config::new();
      c
          .merge(File::with_name("Settings")).unwrap()
          .merge(Environment::with_prefix("APP")).unwrap();
      
      let c = Config::new()
          .merge(File::with_name("Settings")).unwrap()
          .merge(Environment::with_prefix("APP")).unwrap()
          // LLVM should be smart enough to remove the actual clone operation
          // as you are cloning a temporary that is dropped at the same time
          .clone();
      
      let mut s: Settings = Config::new()
          .merge(File::with_name("Settings")).unwrap()
          .merge(Environment::with_prefix("APP")).unwrap()
          .try_into();
      
    Open source →
  45. 0.6.0 23 Jun 2017
    Release notes
    • Implement Source for Vec<T: Source> and Vec<Box<Source>>

      Config::new()
          .merge(vec![
              File::with_name("config/default"),
              File::with_name(&format!("config/{}", run_mode)),
          ])
      
      • Implement From<&Path> and From<PathBuf> for File

      • Remove namespace option for File

      • Add builder pattern to condense configuration

        Config::new()
            .merge(File::with_name("Settings"))
            .merge(Environment::with_prefix("APP"))
            .unwrap()
        
    • Parsing errors even for non required files – @Anthony25 ( #33 )

    Open source →
  46. 0.5.1 16 Jun 2017
    Release notes
    • Added config category to Cargo.toml
    Open source →
  47. 0.5.0 16 Jun 2017
    Release notes
    • config.get has been changed to take a type parameter and to deserialize into that type using serde. Old behavior (get a value variant) can be used by passing config::Value as the type parameter: my_config.get::<config::Value>(".."). Some great help here from @impowski in #25.
    • Propagate parse and type errors through the deep merge (remembering filename, line, etc.)
    • Remove directory traversal on File. This is likely temporary. I do want this behavior but I can see how it should be optional. See #35
    • Add File::with_name to get automatic file format detection instead of manual FileFormat::*@JordiPolo
    • Case normalization #26
    • Remove many possible panics #8
    • my_config.refresh() will do a full re-read from the source so live configuration is possible with some work to watch the file
    Open source →
  48. 0.4.1 12 Feb 2017

    Nothing published for this version

  49. 0.4.0 12 Feb 2017
    Release notes
    • Remove global ( config::get ) API — It's now required to create a local configuration instance with config::Config::new() first.

      If you'd like to have a global configuration instance, use lazy_static! as follows:

      use std::sync::RwLock;
      use config::Config;
      
      lazy_static! {
          static ref CONFIG: RwLock<Config> = Default::default();
      }
      
    Open source →
  50. 0.3.1 08 Feb 2017

    Nothing published for this version

  51. 0.3.0 08 Feb 2017
    Release notes
    • YAML from @tmccombs
    • Nested field retrieval
    • Deep merging of sources (was shallow)
    • config::File::from_str to parse and merge a file from a string
    • Support for retrieval of maps and slices — config::get_table and config::get_array
    Open source →
  52. 0.2.0 29 Jan 2017
    Release notes

    Initial release.

    <!-- next-url --> [Unreleased]: https://github.com/rust-cli/config-rs/compare/v0.15.25...HEAD [0.15.25]: https://github.com/rust-cli/config-rs/compare/v0.15.24...v0.15.25 [0.15.24]: https://github.com/rust-cli/config-rs/compare/v0.15.23...v0.15.24 [0.15.23]: https://github.com/rust-cli/config-rs/compare/v0.15.22...v0.15.23 [0.15.22]: https://github.com/rust-cli/config-rs/compare/v0.15.21...v0.15.22 [0.15.21]: https://github.com/rust-cli/config-rs/compare/v0.15.20...v0.15.21 [0.15.20]: https://github.com/rust-cli/config-rs/compare/v0.15.19...v0.15.20 [0.15.19]: https://github.com/rust-cli/config-rs/compare/v0.15.18...v0.15.19 [0.15.18]: https://github.com/rust-cli/config-rs/compare/v0.15.17...v0.15.18 [0.15.17]: https://github.com/rust-cli/config-rs/compare/v0.15.16...v0.15.17 [0.15.16]: https://github.com/rust-cli/config-rs/compare/v0.15.15...v0.15.16 [0.15.15]: https://github.com/rust-cli/config-rs/compare/v0.15.14...v0.15.15 [0.15.14]: https://github.com/rust-cli/config-rs/compare/v0.15.13...v0.15.14 [0.15.13]: https://github.com/rust-cli/config-rs/compare/v0.15.12...v0.15.13 [0.15.12]: https://github.com/rust-cli/config-rs/compare/v0.15.11...v0.15.12 [0.15.11]: https://github.com/rust-cli/config-rs/compare/v0.15.10...v0.15.11 [0.15.10]: https://github.com/rust-cli/config-rs/compare/v0.15.9...v0.15.10 [0.15.9]: https://github.com/rust-cli/config-rs/compare/v0.15.8...v0.15.9 [0.15.8]: https://github.com/rust-cli/config-rs/compare/v0.15.7...v0.15.8 [0.15.7]: https://github.com/rust-cli/config-rs/compare/v0.15.6...v0.15.7 [0.15.6]: https://github.com/rust-cli/config-rs/compare/v0.15.5...v0.15.6 [0.15.5]: https://github.com/rust-cli/config-rs/compare/v0.15.4...v0.15.5 [0.15.4]: https://github.com/rust-cli/config-rs/compare/v0.15.3...v0.15.4 [0.15.3]: https://github.com/rust-cli/config-rs/compare/v0.15.2...v0.15.3 [0.15.2]: https://github.com/rust-cli/config-rs/compare/v0.15.1...v0.15.2 [0.15.1]: https://github.com/rust-cli/config-rs/compare/v0.15.0...v0.15.1 [0.15.0]: https://github.com/rust-cli/config-rs/compare/v0.14.1...v0.15.0 [0.14.1]: https://github.com/rust-cli/config-rs/compare/0.14.0...v0.14.1

    Open source →
  53. 0.1.3 18 Nov 2015

    Nothing published for this version

  54. 0.1.2 15 Oct 2015

    Nothing published for this version

  55. 0.1.1 30 Apr 2015

    Nothing published for this version

  56. 0.1.0 19 Apr 2015

    Nothing published for this version

  57. 0.0.1 16 Apr 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