{"id":16677476,"url":"https://github.com/foresterre/rust-releases","last_synced_at":"2025-09-09T15:39:07.271Z","repository":{"id":38041030,"uuid":"337689756","full_name":"foresterre/rust-releases","owner":"foresterre","description":"🛬 Identify the officially available Rust releases","archived":false,"fork":false,"pushed_at":"2024-12-10T22:16:13.000Z","size":1594,"stargazers_count":7,"open_issues_count":23,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-12-16T05:42:45.218Z","etag":null,"topics":["bisect","hacktoberfest","index","releases","rust","toolchains"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/foresterre.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-10T10:31:40.000Z","updated_at":"2024-12-10T22:16:14.000Z","dependencies_parsed_at":"2023-12-19T01:02:09.971Z","dependency_job_id":"f14d3c40-b66c-4781-a676-a199ad3f7d1b","html_url":"https://github.com/foresterre/rust-releases","commit_stats":{"total_commits":295,"total_committers":8,"mean_commits":36.875,"dds":0.06779661016949157,"last_synced_commit":"37ddb3d90dd0cd47046947bbc4c48ebdfdfc0d36"},"previous_names":["foresterre/manifesta"],"tags_count":89,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foresterre%2Frust-releases","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foresterre%2Frust-releases/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foresterre%2Frust-releases/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foresterre%2Frust-releases/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/foresterre","download_url":"https://codeload.github.com/foresterre/rust-releases/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229915655,"owners_count":18144014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bisect","hacktoberfest","index","releases","rust","toolchains"],"created_at":"2024-10-12T13:26:34.204Z","updated_at":"2024-12-20T08:08:52.325Z","avatar_url":"https://github.com/foresterre.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rust-releases\n\n[![ci-msrv](https://github.com/foresterre/rust-releases/actions/workflows/msrv.yml/badge.svg)](https://github.com/foresterre/rust-releases/actions/workflows/msrv.yml)\n[![Crates.io version shield](https://img.shields.io/crates/v/rust-releases.svg)](https://crates.io/crates/rust-releases)\n[![Docs](https://docs.rs/rust-releases/badge.svg)](https://docs.rs/rust-releases)\n[![Crates.io license shield](https://img.shields.io/crates/l/rust-releases.svg)](https://crates.io/crates/rust-releases)\n[![MSRV shield](https://img.shields.io/badge/MSRV-1.53.0-informational)](https://github.com/foresterre/cargo-msrv)\n\n| rust-releases version | MSRV |\n|-----------------------|------|\n| 0.21.1                | 1.51 |\n| 0.22.0                | 1.53 |\n| ~~0.23.0~~            | 1.63 |\n| 0.24.0                | 1.63 |\n| 0.25.0                | 1.63 |\n| 0.26.0                | 1.63 |\n| 0.27.0                | 1.67 |\n| 0.28.0                | 1.68 |\n| 0.29.0                | 1.78 |\n\n`*` When unreleased, MSRV subject to change  \n\n## Introduction\n\nThe Rust programming language uses deterministic versioning for toolchain releases. Stable versions use SemVer, \nwhile nightly, beta and historical builds can be accessed by using dated builds (YY-MM-DD).\n\nUnfortunately, a clean index of releases is not available any more. I decided to research which resources where still available\nand found the following solutions:\n    \n  1) Use the AWS index \u003csup\u003e(\u003ca href=\"https://github.com/rust-lang/rust/issues/56971#issuecomment-527199391\"\u003esource\u003c/a\u003e)\u003c/sup\u003e\n  2) Build from individual [release manifests](https://static.rust-lang.org/manifests.txt) \u003csup\u003e(\u003ca href=\"https://github.com/rust-lang/rust/issues/56971#issuecomment-527199391\"\u003esource\u003c/a\u003e)\u003c/sup\u003e\n  3) Parse Rust in-repo [RELEASES.md](https://raw.githubusercontent.com/rust-lang/rust/master/RELEASES.md)\n\nEach of these options requires additional parsing, which is where this crate comes in: the `rust-releases` crate\ncan obtain, parse and build an index from the above resources. This crate also provides methods to iterate over versions \nin a _linear_ fashion, or by using a _bisect_ binary search strategy.\n\nEach data source implements the [Source](https://docs.rs/rust-releases/latest/rust_releases/source/trait.Source.html) trait.  `Source` provides a `build_index` method, which can be used to\nbuild a catalog of released Rust versions.\n\n## Implemented options\n\n\u003ctable\u003e\n\u003cthead\u003e\n     \u003ctr\u003e\n          \u003cth\u003eType of data source\u003c/th\u003e\n          \u003cth\u003eTrait\u003c/th\u003e\n          \u003cth\u003eAvailable\u003c/th\u003e\n          \u003cth\u003eChannels\u003csup\u003e1\u003c/sup\u003e\u003c/th\u003e\n          \u003cth\u003eSpeed\u003csup\u003e2, 3\u003c/sup\u003e\u003c/th\u003e\n          \u003cth\u003eOn disk cache size\u003csup\u003e4\u003c/sup\u003e\u003c/th\u003e\n          \u003cth\u003eNotes\u003c/th\u003e\n     \u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n     \u003ctr\u003e\n          \u003ctd rowspan=\"2\"\u003e\u003ccode\u003eRustChangelog\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eSource\u003c/td\u003e\n          \u003ctd\u003e✅\u003c/td\u003e\n          \u003ctd rowspan=\"2\"\u003eStable\u003c/td\u003e\n          \u003ctd\u003eFast\u003c/td\u003e\n          \u003ctd\u003e-\u003c/td\u003e\n          \u003ctd rowspan=\"2\"\u003e\u003ci\u003eEnabled by default. Disable by setting \u003ccode\u003edefault-features = false\u003c/code\u003e for the \u003ccode\u003erust-releases\u003c/code\u003e dependency in your Cargo.toml manifest.\u003c/i\u003e\u003c/td\u003e\n     \u003c/tr\u003e\n     \u003ctr\u003e\n          \u003ctd\u003eFetchResources\u003c/td\u003e\n          \u003ctd\u003e✅\u003c/td\u003e\n          \u003ctd\u003eInstant (\u003c1 second)\u003c/td\u003e\n          \u003ctd\u003e~491 KB\u003c/td\u003e\n     \u003c/tr\u003e\n     \u003ctr\u003e\n          \u003ctd rowspan=\"2\"\u003e\u003ccode\u003eRustDist\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eSource\u003c/td\u003e\n          \u003ctd\u003e✅\u003c/td\u003e\n          \u003ctd rowspan=\"2\"\u003eStable, \u003cstrike\u003eBeta \u0026 Nightly\u003c/strike\u003e\u003csup\u003eTo be implemented\u003c/sup\u003e\u003c/td\u003e\n          \u003ctd\u003eFast\u003c/td\u003e\n          \u003ctd\u003e-\u003c/td\u003e\n          \u003ctd rowspan=\"2\"\u003e\u003c/td\u003e\n     \u003c/tr\u003e\n     \u003ctr\u003e\n          \u003ctd\u003eFetchResources\u003c/td\u003e\n          \u003ctd\u003e✅\u003c/td\u003e\n          \u003ctd\u003eMedium fast (~10 seconds)\u003c/td\u003e\n          \u003ctd\u003e~1 MB\u003c/td\u003e\n     \u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003csup\u003e1\u003c/sup\u003e: Currently most of the `rust-releases` public API supports only stable. Support for the beta and nightly channel is work-in-progress, and the table currently lists whether there is theoretical support for these channels.\u003cbr\u003e \n\u003csup\u003e2\u003c/sup\u003e: Speed for the `Source` trait primarily consist of parsing speed\u003cbr\u003e \n\u003csup\u003e3\u003c/sup\u003e: Speed for the `FetchResources` trait is primarily limited by your own download speed, and the rate limiting of the server from which the resources are fetched\u003cbr\u003e\n\u003csup\u003e4\u003c/sup\u003e: Approximate as of 2021-03-03\u003cbr\u003e\n\u003csup\u003e5\u003c/sup\u003e: While the channel manifests are the most complete source available, they're practically too slow to download without\nadding some incremental implementation first, while this would still require a large initial download. Since\nwe currently do not use most of the data available in the manifest files, it's usually better to instead pick\na different source. It's more likely we'll take the channel manifests, take a subset and compile it into a smaller source type.\u003cbr\u003e\n\n**Which data source should I use?**\n\nSince support for the beta and nightly channels is work-in-progress, I would advise to use the `RustChangelog` data source as it's\na small download, immediately up-to-date on release and fast to parse. It only supports stable channel releases.\n\nAlternatively, the `RustDist` or `RustDistWithCLI` data sources can be useful, especially when support for the beta and nightly channel are added.\nThey both get their input data from the Rust AWS S3 distribution bucket. When using `RustDist`, the input data can be obtained\nwith the `FetchResources` trait implementation. For `RustDistWithCLI`, you have to obtain the input data yourself (by running the\n`aws` cli with the following options `aws --no-sign-request s3 ls static-rust-lang-org/dist/ \u003e dist.txt`\u003csup\u003e(\u003ca href=\"https://github.com/rust-lang/rust/issues/56971#issuecomment-527199391\"\u003esource\u003c/a\u003e)\u003c/sup\u003e).\n\n## Applications\n\n[cargo-msrv](https://github.com/foresterre/cargo-msrv) is a tool which can be used to determine the minimal supported Rust version (MSRV).\nIt builds your Rust crate and checks whether the build succeeds or fails, as this gives the most complete idea whether a version will work\nwith your (external) dependencies. `cargo-msrv` uses bisection, or a reverse-linear search, to find the lowest appropriate Rust version.\nFor this, it needs to have an idea about the toolchains which have been released, and can be installed.\n\nOriginally we simply parsed the latest channel manifest, and then decreased the minor semver version, but this was obviously not great for many reasons, including:\n* Except for the latest released version, we are left guessing the decreased version numbers\n  actually exist\n* Only stable versions were supported, not nightly, beta, or other channels\n* Only 1.x.0 versions were supported\n\nThis was not ideal, thus `rust-releases` was born. Now cargo-msrv can iterate over Rust releases of which we know they exist and are available.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforesterre%2Frust-releases","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fforesterre%2Frust-releases","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforesterre%2Frust-releases/lists"}