crates.io

App · Code Repositories · 22 actions

Read the Rust package registry from a workflow. Search all 300,000+ crates by name, description, category or keyword, read a crate's metadata, licence, owners and README, and walk its full version history with each release's date, size, checksum and minimum Rust version. List what a version depends on and which crates depend on it, chart 90 days of downloads for a crate or a single version, and get the download URL and SHA-256 of any .crate file. Browse the registry's categories and keywords, look up users and teams, read the front-page summary, and check whether crates.io is accepting writes before a release goes out. Every action reads: nothing here changes anything on crates.io. No account or API token required.

Actions

ActionWhat it does
Get a categoryGet one category with its description, how many crates it holds, and the categories above and below it (crates.io nests them, so 'no-std' has 'no-std::no-alloc' under it).
Get a crateGet everything crates.io publishes about a crate: what it is, its current version, its licence, its repository, how many times it has been downloaded all time and in the last 90 days, and the keywords and categories it is filed under.
Get a crate's download historyGet a crate's last 90 days of downloads: a total for each day, a total for each of its five newest versions, and the busiest day in the window.
Get a crate's READMEGet the README shown on a crate's page.
Get a keywordGet one keyword and how many crates carry it, so a workflow can check whether a keyword is in use and how crowded it is before filtering a search by it.
Get a teamGet a GitHub team that owns crates, by its crates.io login.
Get a userGet a crates.io account by its username: their display name, their avatar, their GitHub profile and the numeric id the rest of the API uses.
Get a user's download totalGet how many times everything a person has published has been downloaded, all time.
Get a versionGet one specific version of a crate: its licence, its size and checksum, the Cargo features it defines, the Rust edition and minimum compiler it needs, who published it and whether it came from a CI workflow rather than a person's token.
Get a version's download historyGet one version's daily downloads over the last 90 days, with its total, its average and its busiest day.
Get a version's download URLGet the URL of a version's .crate file, with its size and its SHA-256 so a later step can check what it downloaded.
Get the registry summaryGet what crates.io shows on its front page: how many crates it holds and how often they have been downloaded, plus the ten newest crates, the ten just updated, the ten most downloaded, the ten most downloaded lately, and the most popular keywords and categories.
Get the registry's statusCheck whether crates.io is accepting writes.
List a crate's ownersList who can publish new versions of a crate: the people and the GitHub teams.
List a crate's versionsList the versions a crate has published, newest first, each with the date it went out, its size, its checksum, its minimum Rust version and whether it has since been yanked.
List a user's or team's cratesList every crate one person or GitHub team owns.
List a version's dependenciesList what a crate depends on: each dependency with the version range it asks for, whether it is a normal, dev or build dependency, whether a Cargo feature gates it and which platforms it applies to.
List categoriesList the categories crates.io curates, each with what belongs in it and how many crates are filed under it.
List every category slugList every category slug and its description in one call, including the nested ones such as 'no-std::no-alloc' that the paged category listing splits across pages.
List keywordsList the keywords crate authors have used, each with how many crates carry it.
List reverse dependenciesList the crates that depend on a crate, with the version range each asks for and how often each is itself downloaded.
Search cratesSearch the Rust package registry for crates by name, description and README text, or browse it by category, by keyword or by first letter.

Get a category

Get one category with its description, how many crates it holds, and the categories above and below it (crates.io nests them, so 'no-std' has 'no-std::no-alloc' under it). No API token required.

Inputs

CategorycategorytextRequired
Which category to read. The list comes from crates.io, so it is always the categories that actually exist.

Outputs

categoryobject
One of crates.io's curated categories.
parent_categorieslist
The categories it sits under.
subcategorieslist
The categories nested under it.
Example output
{
  "category": {
    "crates_count": 3798,
    "created_at": "2019-12-13T13:46:41Z",
    "description": "For crates that focus on some individual part of accelerating the development of games.",
    "name": "Game development",
    "slug": "game-development",
    "url": "https://crates.io/categories/game-development"
  },
  "parent_categories": [],
  "subcategories": []
}

Get a crate

Get everything crates.io publishes about a crate: what it is, its current version, its licence, its repository, how many times it has been downloaded all time and in the last 90 days, and the keywords and categories it is filed under. The starting point for almost any workflow about a crate. No API token required.

Inputs

Crate namecratetextRequired
The crate's name on crates.io, e.g. serde. Hyphens and underscores are interchangeable, so 'serde-json' and 'serde_json' both find the same crate.

Outputs

categorieslist
The categories it is filed under.
crateobject
A crate as crates.io describes it.
default_versionobject
The full metadata of the version the crate's page shows, so a lookup usually needs only this one step.
keywordslist
Its keywords, each with how many other crates use it.
requested_nametext
The name that was asked for.
resolved_nametext
The spelling crates.io stores the crate under, which differs from the name asked for when that spelled a hyphen where the crate has an underscore, or the other way round.
Example output
{
  "categories": [
    {
      "crates_count": 3798,
      "created_at": "2019-12-13T13:46:41Z",
      "description": "For crates that focus on some individual part of accelerating the development of games.",
      "name": "Game development",
      "slug": "game-development",
      "url": "https://crates.io/categories/game-development"
    }
  ],
  "crate": {
    "categories": [
      "no-std",
      "encoding",
      "no-std::no-alloc"
    ],
    "created_at": "2014-12-05T20:20:39Z",
    "default_version": "1.0.229",
    "description": "A generic serialization/deserialization framework",
    "documentation": "https://docs.rs/serde",
    "downloads": 1301029880,
    "homepage": "https://serde.rs",
    "keywords": [
      "no_std",
      "serde",
      "serialization"
    ],
    "name": "serde",
    "newest_version": "1.0.229",
    "num_versions": 316,
    "recent_downloads": 277037661,
    "repository": "https://github.com/serde-rs/serde",
    "trusted_publishing_only": false,
    "updated_at": "2026-07-18T23:05:13Z",
    "url": "https://crates.io/crates/serde",
    "yanked": false
  },
  "default_version": {
    "audit_trail": [
      {
        "action": "publish",
        "at": "2026-07-18T23:05:13Z",
        "by": {
          "avatar_url": "https://avatars.githubusercontent.com/u/1940490?v=4",
          "created_at": "2012-07-09T03:55:40Z",
          "github_url": "https://github.com/dtolnay",
          "id": 3618,
          "login": "dtolnay",
          "name": "David Tolnay",
          "url": "https://crates.io/users/dtolnay"
        }
      }
    ],
    "binary_names": [],
    "checksum": "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba",
    "crate": "serde",
    "created_at": "2026-07-18T23:05:13Z",
    "description": "A generic serialization/deserialization framework",
    "documentation": "https://docs.rs/serde",
    "download_url": "https://crates.io/api/v1/crates/serde/1.0.229/download",
    "downloads": 43016438,
    "edition": "2021",
    "features": [
      {
        "enables": [
          "std"
        ],
        "name": "default"
      }
    ],
    "has_library": true,
    "homepage": "https://serde.rs",
    "id": 2817185,
    "license": "MIT OR Apache-2.0",
    "line_counts": {
      "languages": [
        {
          "code_lines": 11574,
          "comment_lines": 302,
          "files": 25,
          "language": "Rust"
        }
      ],
      "total_code_lines": 11574,
      "total_comment_lines": 302
    },
    "links_native_library": null,
    "published_by": {
      "avatar_url": "https://avatars.githubusercontent.com/u/1940490?v=4",
      "created_at": "2012-07-09T03:55:40Z",
      "github_url": "https://github.com/dtolnay",
      "id": 3618,
      "login": "dtolnay",
      "name": "David Tolnay",
      "url": "https://crates.io/users/dtolnay"
    },
    "published_via": null,
    "repository": "https://github.com/serde-rs/serde",
    "rust_version": "1.56",
    "size_bytes": 83669,
    "updated_at": "2026-07-18T23:05:13Z",
    "url": "https://crates.io/crates/serde/1.0.229",
    "version": "1.0.229",
    "yank_message": null,
    "yanked": false
  },
  "keywords": [
    {
      "crates_count": 1512,
      "created_at": "2014-11-20T20:14:31Z",
      "keyword": "serialization",
      "url": "https://crates.io/keywords/serialization"
    }
  ],
  "requested_name": "serde",
  "resolved_name": "serde"
}

Get a crate's download history

Get a crate's last 90 days of downloads: a total for each day, a total for each of its five newest versions, and the busiest day in the window. crates.io answers this one with around 450 raw rows; they are folded here into the series a chart or an alert actually wants. Narrow it to a date range to compare before and after a release. No API token required.

Inputs

Crate namecratetextRequired
The crate's name on crates.io, e.g. serde. Hyphens and underscores are interchangeable, so 'serde-json' and 'serde_json' both find the same crate.
Fromstart_datedate
Optional. Only days on or after this one. crates.io keeps 90 days, so anything earlier returns nothing.
Toend_datedate
Optional. Only days on or before this one.

Outputs

average_per_daynumber
Mean downloads per day over the window.
busiest_daytext
The day with the most downloads, as YYYY-MM-DD.
busiest_day_downloadsnumber
How many downloads that day saw.
cratetext
The crate this is about, as crates.io spells it.
dailylist
One entry per day, oldest first, counting every version together.
days_coverednumber
How many days the window holds.
end_datetext
The last day in the window.
older_versions_downloadsnumber
Downloads of everything older than those five, which crates.io reports only as a lump sum.
start_datetext
The first day in the window.
total_downloadsnumber
Downloads over the whole window.
versionslist
The five newest versions with their totals over the window, most downloaded first.
Example output
{
  "average_per_day": 3084982.5,
  "busiest_day": "2026-08-20",
  "busiest_day_downloads": 4468532,
  "crate": "serde",
  "daily": [
    {
      "date": "2026-08-23",
      "downloads": 3084982
    }
  ],
  "days_covered": 90,
  "end_date": "2026-08-23",
  "older_versions_downloads": 49028058,
  "start_date": "2026-05-26",
  "total_downloads": 277648428,
  "versions": [
    {
      "downloads": 183868590,
      "version": "1.0.228"
    }
  ]
}

Get a crate's README

Get the README shown on a crate's page. crates.io stores it already rendered, so this returns both the HTML and a plain-text flattening of it: the first to publish somewhere, the second to summarise, search or hand to an AI step. Kept out of Get a crate because it can run to hundreds of kilobytes, and cut to a length you choose. No API token required.

Inputs

Crate namecratetextRequired
The crate's name on crates.io, e.g. serde. Hyphens and underscores are interchangeable, so 'serde-json' and 'serde_json' both find the same crate.
Versionversiontext
Optional. Which version to read. The list is fetched from crates.io, so it is always the versions this crate actually published. Leave blank for the version the crate's page shows.
Maximum lengthmax_charactersnumber
Optional. Cut the README to this many characters. Between 1 and 200,000; 20,000 by default.From 1 to 200000. Default: 20000.

Outputs

charactersnumber
How long the plain text is before any cut.
cratetext
The crate this is about, as crates.io spells it.
has_readmetrue/false
False when the version shipped without a README.
htmltext
The README as crates.io renders it, cut to the length asked for.
texttext
The same README with the markup stripped, which is what to feed a summarising or searching step.
truncatedtrue/false
True when the README was longer than the limit.
urltext
Where crates.io stores the rendered README. Null when the version shipped without one.
versiontext
The version this is about.
Example output
{
  "characters": 1619,
  "crate": "serde",
  "has_readme": true,
  "html": "<p><strong>Serde is a framework for serializing...</strong></p>",
  "text": "Serde is a framework for serializing and deserializing Rust data structures.",
  "truncated": false,
  "url": "https://static.crates.io/readmes/serde/serde-1.0.229.html",
  "version": "1.0.229"
}

Get a keyword

Get one keyword and how many crates carry it, so a workflow can check whether a keyword is in use and how crowded it is before filtering a search by it. No API token required.

Inputs

KeywordkeywordtextRequired
The keyword to look up, exactly as authors spell it. Keywords are lower case and hold no spaces.

Outputs

keywordobject
A keyword a crate's author chose for it.
Example output
{
  "keyword": {
    "crates_count": 1512,
    "created_at": "2014-11-20T20:14:31Z",
    "keyword": "serialization",
    "url": "https://crates.io/keywords/serialization"
  }
}

Get a team

Get a GitHub team that owns crates, by its crates.io login. Team logins are spelled github:<org>:<team>, e.g. github:rust-lang:crates-io. No API token required.

Inputs

Team loginteamtextRequired
The team's crates.io login, spelled github:<org>:<team>. List a crate's owners shows the login of any team that owns a crate.

Outputs

teamobject
A GitHub team that can own crates.
Example output
{
  "team": {
    "avatar_url": "https://avatars.githubusercontent.com/u/5430905?v=4",
    "github_url": "https://github.com/rust-lang",
    "id": 3393,
    "login": "github:rust-lang:crates-io",
    "name": "crates-io"
  }
}

Get a user

Get a crates.io account by its username: their display name, their avatar, their GitHub profile and the numeric id the rest of the API uses. No API token required.

Inputs

UsernameusertextRequired
Their crates.io username, which is their GitHub one. A pasted profile URL works too.

Outputs

userobject
A crates.io account.
Example output
{
  "user": {
    "avatar_url": "https://avatars.githubusercontent.com/u/1940490?v=4",
    "created_at": "2012-07-09T03:55:40Z",
    "github_url": "https://github.com/dtolnay",
    "id": 3618,
    "login": "dtolnay",
    "name": "David Tolnay",
    "url": "https://crates.io/users/dtolnay"
  }
}

Get a user's download total

Get how many times everything a person has published has been downloaded, all time. crates.io's own endpoint wants an internal numeric id, so this takes the username and looks the id up for you. No API token required.

Inputs

UsernameusertextRequired
Their crates.io username, which is their GitHub one. A pasted profile URL works too.

Outputs

total_downloadsnumber
Downloads of every crate they own, added together, since each was published.
userobject
A crates.io account.
Example output
{
  "total_downloads": 25149708372,
  "user": {
    "avatar_url": "https://avatars.githubusercontent.com/u/1940490?v=4",
    "created_at": "2012-07-09T03:55:40Z",
    "github_url": "https://github.com/dtolnay",
    "id": 3618,
    "login": "dtolnay",
    "name": "David Tolnay",
    "url": "https://crates.io/users/dtolnay"
  }
}

Get a version

Get one specific version of a crate: its licence, its size and checksum, the Cargo features it defines, the Rust edition and minimum compiler it needs, who published it and whether it came from a CI workflow rather than a person's token. Use it to read the metadata of the version a project pins, rather than whatever is newest today. No API token required.

Inputs

Crate namecratetextRequired
The crate's name on crates.io, e.g. serde. Hyphens and underscores are interchangeable, so 'serde-json' and 'serde_json' both find the same crate.
Versionversiontext
Optional. Which version to read. The list is fetched from crates.io, so it is always the versions this crate actually published. Leave blank for the version the crate's page shows.

Outputs

cratetext
The crate this is about, as crates.io spells it.
versionobject
One published version of a crate.
Example output
{
  "crate": "serde",
  "version": {
    "audit_trail": [
      {
        "action": "publish",
        "at": "2026-07-18T23:05:13Z",
        "by": {
          "avatar_url": "https://avatars.githubusercontent.com/u/1940490?v=4",
          "created_at": "2012-07-09T03:55:40Z",
          "github_url": "https://github.com/dtolnay",
          "id": 3618,
          "login": "dtolnay",
          "name": "David Tolnay",
          "url": "https://crates.io/users/dtolnay"
        }
      }
    ],
    "binary_names": [],
    "checksum": "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba",
    "crate": "serde",
    "created_at": "2026-07-18T23:05:13Z",
    "description": "A generic serialization/deserialization framework",
    "documentation": "https://docs.rs/serde",
    "download_url": "https://crates.io/api/v1/crates/serde/1.0.229/download",
    "downloads": 43016438,
    "edition": "2021",
    "features": [
      {
        "enables": [
          "std"
        ],
        "name": "default"
      }
    ],
    "has_library": true,
    "homepage": "https://serde.rs",
    "id": 2817185,
    "license": "MIT OR Apache-2.0",
    "line_counts": {
      "languages": [
        {
          "code_lines": 11574,
          "comment_lines": 302,
          "files": 25,
          "language": "Rust"
        }
      ],
      "total_code_lines": 11574,
      "total_comment_lines": 302
    },
    "links_native_library": null,
    "published_by": {
      "avatar_url": "https://avatars.githubusercontent.com/u/1940490?v=4",
      "created_at": "2012-07-09T03:55:40Z",
      "github_url": "https://github.com/dtolnay",
      "id": 3618,
      "login": "dtolnay",
      "name": "David Tolnay",
      "url": "https://crates.io/users/dtolnay"
    },
    "published_via": null,
    "repository": "https://github.com/serde-rs/serde",
    "rust_version": "1.56",
    "size_bytes": 83669,
    "updated_at": "2026-07-18T23:05:13Z",
    "url": "https://crates.io/crates/serde/1.0.229",
    "version": "1.0.229",
    "yank_message": null,
    "yanked": false
  }
}

Get a version's download history

Get one version's daily downloads over the last 90 days, with its total, its average and its busiest day. Use it to watch a new release take up, or to see how much traffic an old version still gets before yanking it. No API token required.

Inputs

Crate namecratetextRequired
The crate's name on crates.io, e.g. serde. Hyphens and underscores are interchangeable, so 'serde-json' and 'serde_json' both find the same crate.
Versionversiontext
Optional. Which version to read. The list is fetched from crates.io, so it is always the versions this crate actually published. Leave blank for the version the crate's page shows.
Beforebefore_datedate
Optional. Only days before this one, which is how crates.io lets you look further back than the default window.

Outputs

average_per_daynumber
Mean downloads per day over the window.
busiest_daytext
The day with the most downloads.
busiest_day_downloadsnumber
How many downloads that day saw.
cratetext
The crate this is about, as crates.io spells it.
dailylist
One entry per day, oldest first.
days_coverednumber
How many days the window holds.
end_datetext
The last day in the window.
start_datetext
The first day in the window.
total_downloadsnumber
Downloads over the whole window.
versiontext
The version this is about.
Example output
{
  "average_per_day": 1169994.8,
  "busiest_day": "2026-08-20",
  "busiest_day_downloads": 1622284,
  "crate": "serde",
  "daily": [
    {
      "date": "2026-08-23",
      "downloads": 1169994
    }
  ],
  "days_covered": 37,
  "end_date": "2026-08-23",
  "start_date": "2026-07-18",
  "total_downloads": 43289807,
  "version": "1.0.229"
}

Get a version's download URL

Get the URL of a version's .crate file, with its size and its SHA-256 so a later step can check what it downloaded. This hands back the link rather than the file itself, so nothing large passes through the workflow. No API token required.

Inputs

Crate namecratetextRequired
The crate's name on crates.io, e.g. serde. Hyphens and underscores are interchangeable, so 'serde-json' and 'serde_json' both find the same crate.
Versionversiontext
Optional. Which version to read. The list is fetched from crates.io, so it is always the versions this crate actually published. Leave blank for the version the crate's page shows.

Outputs

checksum_sha256text
Its SHA-256, as hexadecimal.
cratetext
The crate this is about, as crates.io spells it.
download_urltext
Where the .crate file can be downloaded from.
filenametext
What the file is called, e.g. serde-1.0.229.crate.
size_bytesnumber
How big it is.
versiontext
The version this is about.
yankedtrue/false
True when this version has been withdrawn. It still downloads, but nothing new should depend on it.
Example output
{
  "checksum_sha256": "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba",
  "crate": "serde",
  "download_url": "https://static.crates.io/crates/serde/serde-1.0.229.crate",
  "filename": "serde-1.0.229.crate",
  "size_bytes": 83669,
  "version": "1.0.229",
  "yanked": false
}

Get the registry summary

Get what crates.io shows on its front page: how many crates it holds and how often they have been downloaded, plus the ten newest crates, the ten just updated, the ten most downloaded, the ten most downloaded lately, and the most popular keywords and categories. One call for a digest of the whole registry. No API token required.

Inputs

None.

Outputs

just_updatedlist
The ten crates updated most recently.
most_downloadedlist
The ten most downloaded crates of all time.
most_recently_downloadedlist
The ten most downloaded in the last 90 days, which is a better read on what is popular now.
new_crateslist
The ten most recently published crates.
popular_categorieslist
The ten categories holding the most crates.
popular_keywordslist
The ten keywords on the most crates.
total_cratesnumber
How many crates the registry holds.
total_downloadsnumber
Downloads of everything on it, all time.
Example output
{
  "just_updated": [
    {
      "categories": [
        "no-std",
        "encoding",
        "no-std::no-alloc"
      ],
      "created_at": "2014-12-05T20:20:39Z",
      "default_version": "1.0.229",
      "description": "A generic serialization/deserialization framework",
      "documentation": "https://docs.rs/serde",
      "downloads": 1301029880,
      "homepage": "https://serde.rs",
      "keywords": [
        "no_std",
        "serde",
        "serialization"
      ],
      "name": "serde",
      "newest_version": "1.0.229",
      "num_versions": 316,
      "recent_downloads": 277037661,
      "repository": "https://github.com/serde-rs/serde",
      "trusted_publishing_only": false,
      "updated_at": "2026-07-18T23:05:13Z",
      "url": "https://crates.io/crates/serde",
      "yanked": false
    }
  ],
  "most_downloaded": [
    {
      "categories": [
        "no-std",
        "encoding",
        "no-std::no-alloc"
      ],
      "created_at": "2014-12-05T20:20:39Z",
      "default_version": "1.0.229",
      "description": "A generic serialization/deserialization framework",
      "documentation": "https://docs.rs/serde",
      "downloads": 1301029880,
      "homepage": "https://serde.rs",
      "keywords": [
        "no_std",
        "serde",
        "serialization"
      ],
      "name": "serde",
      "newest_version": "1.0.229",
      "num_versions": 316,
      "recent_downloads": 277037661,
      "repository": "https://github.com/serde-rs/serde",
      "trusted_publishing_only": false,
      "updated_at": "2026-07-18T23:05:13Z",
      "url": "https://crates.io/crates/serde",
      "yanked": false
    }
  ],
  "most_recently_downloaded": [
    {
      "categories": [
        "no-std",
        "encoding",
        "no-std::no-alloc"
      ],
      "created_at": "2014-12-05T20:20:39Z",
      "default_version": "1.0.229",
      "description": "A generic serialization/deserialization framework",
      "documentation": "https://docs.rs/serde",
      "downloads": 1301029880,
      "homepage": "https://serde.rs",
      "keywords": [
        "no_std",
        "serde",
        "serialization"
      ],
      "name": "serde",
      "newest_version": "1.0.229",
      "num_versions": 316,
      "recent_downloads": 277037661,
      "repository": "https://github.com/serde-rs/serde",
      "trusted_publishing_only": false,
      "updated_at": "2026-07-18T23:05:13Z",
      "url": "https://crates.io/crates/serde",
      "yanked": false
    }
  ],
  "new_crates": [
    {
      "categories": [
        "no-std",
        "encoding",
        "no-std::no-alloc"
      ],
      "created_at": "2014-12-05T20:20:39Z",
      "default_version": "1.0.229",
      "description": "A generic serialization/deserialization framework",
      "documentation": "https://docs.rs/serde",
      "downloads": 1301029880,
      "homepage": "https://serde.rs",
      "keywords": [
        "no_std",
        "serde",
        "serialization"
      ],
      "name": "serde",
      "newest_version": "1.0.229",
      "num_versions": 316,
      "recent_downloads": 277037661,
      "repository": "https://github.com/serde-rs/serde",
      "trusted_publishing_only": false,
      "updated_at": "2026-07-18T23:05:13Z",
      "url": "https://crates.io/crates/serde",
      "yanked": false
    }
  ],
  "popular_categories": [
    {
      "crates_count": 3798,
      "created_at": "2019-12-13T13:46:41Z",
      "description": "For crates that focus on some individual part of accelerating the development of games.",
      "name": "Game development",
      "slug": "game-development",
      "url": "https://crates.io/categories/game-development"
    }
  ],
  "popular_keywords": [
    {
      "crates_count": 1512,
      "created_at": "2014-11-20T20:14:31Z",
      "keyword": "serialization",
      "url": "https://crates.io/keywords/serialization"
    }
  ],
  "total_crates": 321581,
  "total_downloads": 410410111515
}

Get the registry's status

Check whether crates.io is accepting writes. During maintenance the registry goes read-only, and any publish, yank or ownership change fails until it comes back, so a release workflow can test this first and wait rather than fail. Also returns the banner message crates.io is showing, if any. No API token required.

Inputs

None.

Outputs

accepting_publishestrue/false
The same thing the other way round, so a condition step reads the way you would say it aloud.
banner_messagetext
The notice crates.io is showing on every page, if there is one. Null the rest of the time.
cdn_base_urltext
Where crate files and READMEs are served from.
committext
The same commit, under the name the API gives it.
deployed_shatext
The commit crates.io is currently running.
read_onlytrue/false
True while crates.io is in read-only mode, when nothing can be published, yanked or changed.
Example output
{
  "accepting_publishes": true,
  "banner_message": null,
  "cdn_base_url": "https://static.crates.io",
  "commit": "42df592c355587e792e7424563b336c7f01344d0",
  "deployed_sha": "42df592c355587e792e7424563b336c7f01344d0",
  "read_only": false
}

List a crate's owners

List who can publish new versions of a crate: the people and the GitHub teams. Use it to audit who holds publishing rights across the crates you depend on, or to check an ownership change landed. No API token required.

Inputs

Crate namecratetextRequired
The crate's name on crates.io, e.g. serde. Hyphens and underscores are interchangeable, so 'serde-json' and 'serde_json' both find the same crate.
Showowner_kindtext
Optional. Which owners to list. Both kinds by default.One of: all (Users and teams), users (Users only), teams (Teams only). Default: all.

Outputs

countnumber
How many owners were returned.
cratetext
The crate this is about, as crates.io spells it.
owner_kindtext
Which kinds were asked for.
ownerslist
The owners that matched.
team_countnumber
How many are GitHub teams.
user_countnumber
How many of them are people.
Example output
{
  "count": 1,
  "crate": "serde",
  "owner_kind": "all",
  "owners": [
    {
      "avatar_url": "https://avatars.githubusercontent.com/u/1940490?v=4",
      "github_url": "https://github.com/dtolnay",
      "id": 3618,
      "kind": "user",
      "login": "dtolnay",
      "name": "David Tolnay",
      "url": "https://crates.io/users/dtolnay"
    }
  ],
  "team_count": 0,
  "user_count": 1
}

List a crate's versions

List the versions a crate has published, newest first, each with the date it went out, its size, its checksum, its minimum Rust version and whether it has since been yanked. Use it to build a release history, to see how often a project ships, or to find every version still on a supported release track. No API token required.

Inputs

Crate namecratetextRequired
The crate's name on crates.io, e.g. serde. Hyphens and underscores are interchangeable, so 'serde-json' and 'serde_json' both find the same crate.
Only these versionsversionslist
Optional. Return only these versions. The list is fetched from crates.io, so it is always the versions this crate actually published. Leave blank for all.
Order bysorttext
Optional. Highest version number first by default, which is not the same as most recent when a project back-ports fixes to an older series.One of: semver (Highest version number first), date (Most recently published first). Default: semver.
Include withdrawn versionsinclude_yankedtrue/false
Optional. Include versions that have been yanked. On by default; turn it off to see only what a new project could depend on.Default: true.
Pagepagenumber
Optional. Which page of results to fetch. crates.io pages this listing one page at a time, so a later page costs a request per page before it and cannot go past 20. Raise the page size instead. 1 by default.From 1 to 20. Default: 1.
Results per pageper_pagenumber
Optional. How many results to return. Between 1 and 100, which is crates.io's own ceiling; 25 by default.From 1 to 100. Default: 25.

Outputs

countnumber
How many results this page holds.
cratetext
The crate this is about, as crates.io spells it.
has_moretrue/false
True when there is another page after this one.
next_pagenumber
The page number that fetches the next page. Null when this is the last one.
pagenumber
Which page this is.
per_pagenumber
How many results were asked for per page.
release_trackslist
The highest version on each release series, so a crate maintaining 0.9.x alongside 1.x shows both.
sorttext
The order the results came back in.
total_countnumber
How many results there are altogether. Null on the few listings crates.io does not count.
versionslist
The versions on this page.
Example output
{
  "count": 1,
  "crate": "serde",
  "has_more": true,
  "next_page": 2,
  "page": 1,
  "per_page": 25,
  "release_tracks": [
    {
      "highest": "1.0.229",
      "track": "1"
    },
    {
      "highest": "0.9.15",
      "track": "0.9"
    }
  ],
  "sort": "semver",
  "total_count": 316,
  "versions": [
    {
      "audit_trail": [
        {
          "action": "publish",
          "at": "2026-07-18T23:05:13Z",
          "by": {
            "avatar_url": "https://avatars.githubusercontent.com/u/1940490?v=4",
            "created_at": "2012-07-09T03:55:40Z",
            "github_url": "https://github.com/dtolnay",
            "id": 3618,
            "login": "dtolnay",
            "name": "David Tolnay",
            "url": "https://crates.io/users/dtolnay"
          }
        }
      ],
      "binary_names": [],
      "checksum": "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba",
      "crate": "serde",
      "created_at": "2026-07-18T23:05:13Z",
      "description": "A generic serialization/deserialization framework",
      "documentation": "https://docs.rs/serde",
      "download_url": "https://crates.io/api/v1/crates/serde/1.0.229/download",
      "downloads": 43016438,
      "edition": "2021",
      "features": [
        {
          "enables": [
            "std"
          ],
          "name": "default"
        }
      ],
      "has_library": true,
      "homepage": "https://serde.rs",
      "id": 2817185,
      "license": "MIT OR Apache-2.0",
      "line_counts": {
        "languages": [
          {
            "code_lines": 11574,
            "comment_lines": 302,
            "files": 25,
            "language": "Rust"
          }
        ],
        "total_code_lines": 11574,
        "total_comment_lines": 302
      },
      "links_native_library": null,
      "published_by": {
        "avatar_url": "https://avatars.githubusercontent.com/u/1940490?v=4",
        "created_at": "2012-07-09T03:55:40Z",
        "github_url": "https://github.com/dtolnay",
        "id": 3618,
        "login": "dtolnay",
        "name": "David Tolnay",
        "url": "https://crates.io/users/dtolnay"
      },
      "published_via": null,
      "repository": "https://github.com/serde-rs/serde",
      "rust_version": "1.56",
      "size_bytes": 83669,
      "updated_at": "2026-07-18T23:05:13Z",
      "url": "https://crates.io/crates/serde/1.0.229",
      "version": "1.0.229",
      "yank_message": null,
      "yanked": false
    }
  ]
}

List a user's or team's crates

List every crate one person or GitHub team owns. crates.io's own endpoint wants an internal numeric id, so this takes the login you can see and looks the id up for you. Use it to inventory what a team publishes, or to watch a maintainer's releases. No API token required.

Inputs

User or teamownertextRequired
A crates.io username, e.g. dtolnay, or a team login spelled github:<org>:<team>, e.g. github:rust-lang:crates-io.
This login isowner_kindtext
Optional. Left alone, a login starting with 'github:' is read as a team and anything else as a person.One of: auto (Work it out from the login), user (A crates.io user), team (A GitHub team). Default: auto.
Order bysorttext
Optional. Name order by default.One of: relevance (Best match for the search text), downloads (Most downloads all time), recent-downloads (Most downloads in the last 90 days), recent-updates (Most recently updated), new (Most recently published), alphabetical (Crate name, A to Z). Default: alphabetical.
Pagepagenumber
Optional. Which page of results to fetch. Use the next page from the previous result to walk through them. 1 by default.From 1 to 10000. Default: 1.
Results per pageper_pagenumber
Optional. How many results to return. Between 1 and 100, which is crates.io's own ceiling; 25 by default.From 1 to 100. Default: 25.

Outputs

countnumber
How many results this page holds.
crateslist
The crates on this page.
has_moretrue/false
True when there is another page after this one.
next_pagenumber
The page number that fetches the next page. Null when this is the last one.
ownerobject
The account the crates belong to.
owner_kindtext
user or team, after any auto-detection.
pagenumber
Which page this is.
per_pagenumber
How many results were asked for per page.
sorttext
The order the results came back in.
total_countnumber
How many results there are altogether. Null on the few listings crates.io does not count.
Example output
{
  "count": 1,
  "crates": [
    {
      "categories": [
        "no-std",
        "encoding",
        "no-std::no-alloc"
      ],
      "created_at": "2014-12-05T20:20:39Z",
      "default_version": "1.0.229",
      "description": "A generic serialization/deserialization framework",
      "documentation": "https://docs.rs/serde",
      "downloads": 1301029880,
      "homepage": "https://serde.rs",
      "keywords": [
        "no_std",
        "serde",
        "serialization"
      ],
      "name": "serde",
      "newest_version": "1.0.229",
      "num_versions": 316,
      "recent_downloads": 277037661,
      "repository": "https://github.com/serde-rs/serde",
      "trusted_publishing_only": false,
      "updated_at": "2026-07-18T23:05:13Z",
      "url": "https://crates.io/crates/serde",
      "yanked": false
    }
  ],
  "has_more": true,
  "next_page": 2,
  "owner": {
    "avatar_url": "https://avatars.githubusercontent.com/u/1940490?v=4",
    "created_at": "2012-07-09T03:55:40Z",
    "github_url": "https://github.com/dtolnay",
    "id": 3618,
    "login": "dtolnay",
    "name": "David Tolnay",
    "url": "https://crates.io/users/dtolnay"
  },
  "owner_kind": "user",
  "page": 1,
  "per_page": 25,
  "sort": "alphabetical",
  "total_count": 84
}

List a version's dependencies

List what a crate depends on: each dependency with the version range it asks for, whether it is a normal, dev or build dependency, whether a Cargo feature gates it and which platforms it applies to. Filter to normal dependencies alone to see what actually ships. No API token required.

Inputs

Crate namecratetextRequired
The crate's name on crates.io, e.g. serde. Hyphens and underscores are interchangeable, so 'serde-json' and 'serde_json' both find the same crate.
Versionversiontext
Optional. Which version to read. The list is fetched from crates.io, so it is always the versions this crate actually published. Leave blank for the version the crate's page shows.
Dependency kindskindslist
Optional. Which kinds to return. All three when left blank.One or more of: normal (Normal - needed to build the crate itself), dev (Dev - needed only for its tests, examples and benchmarks), build (Build - needed only by its build script).
Include optional dependenciesinclude_optionaltrue/false
Optional. Include dependencies that only a Cargo feature pulls in. On by default; turn it off to see what a default build actually compiles.Default: true.

Outputs

build_countnumber
How many are build dependencies.
countnumber
How many dependencies were returned.
cratetext
The crate this is about, as crates.io spells it.
dependencieslist
The dependencies that matched the filters.
dev_countnumber
How many are dev dependencies.
normal_countnumber
How many of them are normal dependencies.
optional_countnumber
How many are gated behind a Cargo feature.
versiontext
The version this is about.
Example output
{
  "build_count": 0,
  "count": 1,
  "crate": "serde",
  "dependencies": [
    {
      "crate": "serde_derive",
      "default_features": true,
      "features": [],
      "kind": "normal",
      "optional": true,
      "requirement": "^1",
      "target": null,
      "url": "https://crates.io/crates/serde_derive"
    }
  ],
  "dev_count": 0,
  "normal_count": 1,
  "optional_count": 1,
  "version": "1.0.229"
}

List categories

List the categories crates.io curates, each with what belongs in it and how many crates are filed under it. Unlike keywords, which any author can invent, these are a fixed set, so this is the way to see what the registry is organised into. No API token required.

Inputs

Order bysorttext
Optional. Name order by default.One of: alpha (Name, A to Z), crates (Most crates first). Default: alpha.
Pagepagenumber
Optional. Which page of results to fetch. Use the next page from the previous result to walk through them. 1 by default.From 1 to 10000. Default: 1.
Results per pageper_pagenumber
Optional. How many results to return. Between 1 and 100, which is crates.io's own ceiling; 25 by default.From 1 to 100. Default: 25.

Outputs

categorieslist
The categories on this page.
countnumber
How many results this page holds.
has_moretrue/false
True when there is another page after this one.
next_pagenumber
The page number that fetches the next page. Null when this is the last one.
pagenumber
Which page this is.
per_pagenumber
How many results were asked for per page.
sorttext
The order the results came back in.
total_countnumber
How many results there are altogether. Null on the few listings crates.io does not count.
Example output
{
  "categories": [
    {
      "crates_count": 3798,
      "created_at": "2019-12-13T13:46:41Z",
      "description": "For crates that focus on some individual part of accelerating the development of games.",
      "name": "Game development",
      "slug": "game-development",
      "url": "https://crates.io/categories/game-development"
    }
  ],
  "count": 1,
  "has_more": true,
  "next_page": 2,
  "page": 1,
  "per_page": 25,
  "sort": "alpha",
  "total_count": 58
}

List every category slug

List every category slug and its description in one call, including the nested ones such as 'no-std::no-alloc' that the paged category listing splits across pages. The quickest way to get the whole vocabulary for a step that has to pick a category. No API token required.

Inputs

None.

Outputs

category_slugslist
Every slug, in alphabetical order.
countnumber
How many slugs there are.
Example output
{
  "category_slugs": [
    {
      "description": "For crates that focus on some individual part of accelerating the development of games.",
      "slug": "game-development"
    }
  ],
  "count": 104
}

List keywords

List the keywords crate authors have used, each with how many crates carry it. Order by popularity to see what the registry is actually about, or use it to find the exact spelling of a keyword before filtering a search by it. No API token required.

Inputs

Order bysorttext
Optional. Alphabetical by default. There are tens of thousands of keywords, so 'Most crates first' is usually the useful one.One of: alpha (Name, A to Z), crates (Most crates first). Default: alpha.
Pagepagenumber
Optional. Which page of results to fetch. Use the next page from the previous result to walk through them. 1 by default.From 1 to 10000. Default: 1.
Results per pageper_pagenumber
Optional. How many results to return. Between 1 and 100, which is crates.io's own ceiling; 25 by default.From 1 to 100. Default: 25.

Outputs

countnumber
How many results this page holds.
has_moretrue/false
True when there is another page after this one.
keywordslist
The keywords on this page.
next_pagenumber
The page number that fetches the next page. Null when this is the last one.
pagenumber
Which page this is.
per_pagenumber
How many results were asked for per page.
sorttext
The order the results came back in.
total_countnumber
How many results there are altogether. Null on the few listings crates.io does not count.
Example output
{
  "count": 1,
  "has_more": true,
  "keywords": [
    {
      "crates_count": 1512,
      "created_at": "2014-11-20T20:14:31Z",
      "keyword": "serialization",
      "url": "https://crates.io/keywords/serialization"
    }
  ],
  "next_page": 2,
  "page": 1,
  "per_page": 25,
  "sort": "crates",
  "total_count": 55848
}

List reverse dependencies

List the crates that depend on a crate, with the version range each asks for and how often each is itself downloaded. The step for 'who would a breaking change here affect?' and for seeing which of your dependents are still on an old range. No API token required.

Inputs

Crate namecratetextRequired
The crate's name on crates.io, e.g. serde. Hyphens and underscores are interchangeable, so 'serde-json' and 'serde_json' both find the same crate.
Pagepagenumber
Optional. Which page of results to fetch. Use the next page from the previous result to walk through them. 1 by default.From 1 to 10000. Default: 1.
Results per pageper_pagenumber
Optional. How many results to return. Between 1 and 100, which is crates.io's own ceiling; 25 by default.From 1 to 100. Default: 25.

Outputs

countnumber
How many results this page holds.
cratetext
The crate this is about, as crates.io spells it.
dependentslist
The crates depending on it, most downloaded first.
has_moretrue/false
True when there is another page after this one.
next_pagenumber
The page number that fetches the next page. Null when this is the last one.
pagenumber
Which page this is.
per_pagenumber
How many results were asked for per page.
total_countnumber
How many results there are altogether. Null on the few listings crates.io does not count.
Example output
{
  "count": 1,
  "crate": "serde",
  "dependents": [
    {
      "crate": "hashbrown",
      "default_features": false,
      "downloads": 2240835325,
      "features": [],
      "kind": "normal",
      "optional": true,
      "published_at": "2026-05-09T04:35:04Z",
      "requirement": "^1.0.220",
      "target": "cfg(any())",
      "url": "https://crates.io/crates/hashbrown",
      "version": "0.17.1",
      "yanked": false
    }
  ],
  "has_more": true,
  "next_page": 2,
  "page": 1,
  "per_page": 25,
  "total_count": 116773
}

Search crates

Search the Rust package registry for crates by name, description and README text, or browse it by category, by keyword or by first letter. Order by relevance, by downloads, by recent downloads or by how recently each was published. The starting point for 'what is there for X in Rust?'. No API token required.

Inputs

Search textquerytext
Optional. What to search for. crates.io matches names, descriptions and README text. Leave blank to browse with the filters below instead.
Categorycategorytext
Optional. Only crates in this category, or one of its subcategories. The list comes from crates.io, so it is always the categories that actually exist.
Keywordkeywordtext
Optional. Only crates whose authors listed this keyword. Keywords are free text chosen by each author, so List keywords is the way to see which exist.
All of these keywordsall_keywordslist
Optional. Only crates carrying every one of these keywords. Overrides the single keyword above.
Starting letterlettertext
Optional. Only crates whose name starts with this letter. crates.io ignores it when a keyword filter is set.One of: a, b, c, d, e, f, g, h, i, j, and 16 more.
Include withdrawn cratesinclude_yankedtrue/false
Optional. Include crates whose every version has been yanked. Off by default, which is what crates.io's own search does.Default: false.
Order bysorttext
Optional. How to order the results. Best match when there is search text, name order when there is not.One of: relevance (Best match for the search text), downloads (Most downloads all time), recent-downloads (Most downloads in the last 90 days), recent-updates (Most recently updated), new (Most recently published), alphabetical (Crate name, A to Z).
Pagepagenumber
Optional. Which page of results to fetch. Use the next page from the previous result to walk through them. 1 by default.From 1 to 10000. Default: 1.
Results per pageper_pagenumber
Optional. How many results to return. Between 1 and 100, which is crates.io's own ceiling; 25 by default.From 1 to 100. Default: 25.

Outputs

countnumber
How many results this page holds.
crateslist
The crates on this page.
filtersobject
The filters that were applied.
has_moretrue/false
True when there is another page after this one.
next_pagenumber
The page number that fetches the next page. Null when this is the last one.
pagenumber
Which page this is.
per_pagenumber
How many results were asked for per page.
querytext
The text that was searched for, if any.
sorttext
The order the results came back in.
total_countnumber
How many results there are altogether. Null on the few listings crates.io does not count.
Example output
{
  "count": 1,
  "crates": [
    {
      "categories": [
        "no-std",
        "encoding",
        "no-std::no-alloc"
      ],
      "created_at": "2014-12-05T20:20:39Z",
      "default_version": "1.0.229",
      "description": "A generic serialization/deserialization framework",
      "documentation": "https://docs.rs/serde",
      "downloads": 1301029880,
      "homepage": "https://serde.rs",
      "keywords": [
        "no_std",
        "serde",
        "serialization"
      ],
      "name": "serde",
      "newest_version": "1.0.229",
      "num_versions": 316,
      "recent_downloads": 277037661,
      "repository": "https://github.com/serde-rs/serde",
      "trusted_publishing_only": false,
      "updated_at": "2026-07-18T23:05:13Z",
      "url": "https://crates.io/crates/serde",
      "yanked": false
    }
  ],
  "filters": {
    "all_keywords": [],
    "category": null,
    "include_yanked": false,
    "keyword": null,
    "letter": null
  },
  "has_more": true,
  "next_page": 2,
  "page": 1,
  "per_page": 25,
  "query": "serialization",
  "sort": "relevance",
  "total_count": 2841
}

On this page