# RubyGems

> Read anything on RubyGems.org. Look a gem up by name for its licence, authors, links and dependencies, walk its whole release history, open one release for its files, checksums and signed attestations, and see who can push to it. Search the registry, watch what has been published in the last week, find which gems depend on one you care about, and track download counts for a release, a gem or the whole site. No account or API key is required.

App · Code Repositories · 18 actions. Web page: https://docs.lodol.com/docs/integrations/rubygems

## Actions

### Find gem names

Find gem names that match some text, from the same lookup that fills the search box on RubyGems.org. Names only, which is what 'is there a gem called something like this?' asks and what feeds a gem field in a later step. The answer says whether one of them matched exactly. No API key required.

**Inputs**

- Name starts with (`query`, text, required): The beginning of a gem name. Matching is on the name itself, not on descriptions, so a topic finds nothing here and belongs in 'Search gems'.
- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `exact_match` (true/false)
- `gems` (list)
- `query` (text)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "count": 3,
  "exact_match": true,
  "gems": [
    {
      "name": "nokogiri",
      "rubygems_url": "https://rubygems.org/gems/nokogiri"
    },
    {
      "name": "nokogiri-diff",
      "rubygems_url": "https://rubygems.org/gems/nokogiri-diff"
    },
    {
      "name": "nokogiri-happymapper",
      "rubygems_url": "https://rubygems.org/gems/nokogiri-happymapper"
    }
  ],
  "query": "nokogiri",
  "total_count": 30,
  "truncated": true
}
```

### Get a gem

Look up a gem on RubyGems.org: what it does, who wrote it, what licence it carries, where its source, issues and changelog live, what it depends on, and how often it has been downloaded. Everything is at the gem's newest release; use 'Get a gem version' to read an older one. No API key required.

**Inputs**

- Gem name (`gem`, text, required): The gem to look up, spelled exactly as you would install it. Use 'Find gem names' first if you are not sure of the spelling.

**Outputs**

- `authors` (list)
- `bug_tracker_url` (text)
- `changelog_url` (text)
- `development_dependencies` (list)
- `development_dependency_count` (number)
- `documentation_url` (text)
- `downloads` (number)
- `funding_url` (text)
- `gem` (text)
- `gem_file_url` (text)
- `homepage_url` (text)
- `info` (text)
- `licenses` (list)
- `mailing_list_url` (text)
- `mfa_required` (true/false)
- `platform` (text)
- `rubygems_url` (text)
- `runtime_dependencies` (list)
- `runtime_dependency_count` (number)
- `sha256` (text)
- `source_code_url` (text)
- `spec_sha256` (text)
- `version` (text)
- `version_created_at` (text)
- `version_downloads` (number)
- `wiki_url` (text)
- `yanked` (true/false)

**Example output**

```json
{
  "authors": [
    "David Heinemeier Hansson"
  ],
  "bug_tracker_url": "https://github.com/rails/rails/issues",
  "changelog_url": "https://github.com/rails/rails/releases/tag/v8.1.3.1",
  "development_dependencies": [],
  "development_dependency_count": 0,
  "documentation_url": "https://api.rubyonrails.org/v8.1.3.1/",
  "downloads": 778774508,
  "funding_url": null,
  "gem": "rails",
  "gem_file_url": "https://rubygems.org/gems/rails-8.1.3.1.gem",
  "homepage_url": "https://rubyonrails.org",
  "info": "Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring...",
  "licenses": [
    "MIT"
  ],
  "mailing_list_url": "https://discuss.rubyonrails.org/c/rubyonrails-talk",
  "mfa_required": true,
  "platform": "ruby",
  "rubygems_url": "https://rubygems.org/gems/rails",
  "runtime_dependencies": [
    {
      "name": "actioncable",
      "requirements": "= 8.1.3.1",
      "rubygems_url": "https://rubygems.org/gems/actioncable"
    },
    {
      "name": "actionmailbox",
      "requirements": "= 8.1.3.1",
      "rubygems_url": "https://rubygems.org/gems/actionmailbox"
    }
  ],
  "runtime_dependency_count": 13,
  "sha256": "ccd11a36bfc171bf9c66d585d14c0ece91c0c9dde840aae60c0118d6f5c9c52a",
  "source_code_url": "https://github.com/rails/rails/tree/v8.1.3.1",
  "spec_sha256": "5b60af49df6edf722925a85d144f1118abda22485a820da2c516e97cab8347b8",
  "version": "8.1.3.1",
  "version_created_at": "2026-07-29T15:02:41.060Z",
  "version_downloads": 3429349,
  "wiki_url": null,
  "yanked": false
}
```

### Get a gem version

Read one specific release of a gem in full: its summary and description, when it was built and published, the Ruby and RubyGems versions it needs, its dependencies and its checksums. Use it to read the release a project actually pins rather than whatever is newest today. No API key required.

**Inputs**

- Gem name (`gem`, text, required): The gem to look up, spelled exactly as you would install it. Use 'Find gem names' first if you are not sure of the spelling.
- Version (`version`, text, required): Which release to read. Fill in the gem first and this list loads, newest first, with the date each went out. Yanked releases are not listed, because RubyGems no longer serves them.
- Platform (`platform`, text): Which build of this release to read. Leave blank for the default, which is the pure Ruby build for almost every gem. Fill in the gem and version first and this list loads.

**Outputs**

- `authors` (list)
- `bug_tracker_url` (text)
- `built_at` (text)
- `changelog_url` (text)
- `created_at` (text)
- `description` (text)
- `development_dependencies` (list)
- `development_dependency_count` (number)
- `documentation_url` (text)
- `downloads` (number)
- `funding_url` (text)
- `gem` (text)
- `gem_file_url` (text)
- `homepage_url` (text)
- `info` (text)
- `licenses` (list)
- `mailing_list_url` (text)
- `mfa_required` (true/false)
- `platform` (text)
- `prerelease` (true/false)
- `requested_version` (text)
- `requirements` (list)
- `ruby_version` (text)
- `rubygems_url` (text)
- `rubygems_version` (text)
- `runtime_dependencies` (list)
- `runtime_dependency_count` (number)
- `sha256` (text)
- `source_code_url` (text)
- `spec_sha256` (text)
- `summary` (text)
- `version` (text)
- `version_downloads` (number)
- `wiki_url` (text)
- `yanked` (true/false)

**Example output**

```json
{
  "authors": [
    "Leah Neukirchen"
  ],
  "bug_tracker_url": "https://github.com/rack/rack/issues",
  "built_at": "1980-01-02T00:00:00.000Z",
  "changelog_url": "https://github.com/rack/rack/blob/main/CHANGELOG.md",
  "created_at": "2026-08-13T06:57:35.545Z",
  "description": "Rack provides a minimal, modular and adaptable interface for developing\nweb applications in Ruby. By wrapping HTTP requests and responses in\nthe simpl...",
  "development_dependencies": [
    {
      "name": "bundler",
      "requirements": ">= 0",
      "rubygems_url": "https://rubygems.org/gems/bundler"
    },
    {
      "name": "minitest",
      "requirements": "~> 5.0",
      "rubygems_url": "https://rubygems.org/gems/minitest"
    }
  ],
  "development_dependency_count": 4,
  "documentation_url": "https://rubydoc.info/github/rack/rack",
  "downloads": 1331697443,
  "funding_url": null,
  "gem": "rack",
  "gem_file_url": "https://rubygems.org/gems/rack-3.2.7.gem",
  "homepage_url": "https://github.com/rack/rack",
  "info": "Rack provides a minimal, modular and adaptable interface for developing\nweb applications in Ruby. By wrapping HTTP requests and responses in\nthe simpl...",
  "licenses": [
    "MIT"
  ],
  "mailing_list_url": null,
  "mfa_required": true,
  "platform": "ruby",
  "prerelease": false,
  "requested_version": "3.2.7",
  "requirements": [],
  "ruby_version": ">= 2.4.0",
  "rubygems_url": "https://rubygems.org/gems/rack/versions/3.2.7",
  "rubygems_version": ">= 0",
  "runtime_dependencies": [],
  "runtime_dependency_count": 0,
  "sha256": "93e13e1c24f93556671d85d2d79fa228c3485815c50d7e2f265b5330c6528fb7",
  "source_code_url": "https://github.com/rack/rack",
  "spec_sha256": "2f10210c32d303272ddf7229b775dcc920a0c8dece7b3ff502651bcf7a440c7c",
  "summary": "A modular Ruby webserver interface.",
  "version": "3.2.7",
  "version_downloads": 1235527,
  "wiki_url": null,
  "yanked": false
}
```

### Get a user profile

Get a RubyGems user's public profile. Takes a username or the numeric id that appears on a gem's owner list, so it is the step that turns an id into a name a person recognises. No API key required.

**Inputs**

- Username or user id (`user`, text, required): The person's RubyGems username or their numeric user id. Both reach the same profile.

**Outputs**

- `email` (text)
- `handle` (text)
- `id` (number)
- `profile_url` (text)
- `user` (text)

**Example output**

```json
{
  "email": null,
  "handle": "raggi",
  "id": 264,
  "profile_url": "https://rubygems.org/profiles/raggi",
  "user": "raggi"
}
```

### Get a version's attestations

Get the sigstore attestations published with a release: proof, signed when the gem was pushed and recorded in a public transparency log, of what was published and by which build. The supply chain check for a dependency. Signing is opt-in and recent, so an empty answer is normal rather than a failure. No API key required.

**Inputs**

- Gem name (`gem`, text, required): The gem to look up, spelled exactly as you would install it. Use 'Find gem names' first if you are not sure of the spelling.
- Version (`version`, text, required): Which release to read. Fill in the gem first and this list loads, newest first, with the date each went out. Yanked releases are not listed, because RubyGems no longer serves them.
- Platform (`platform`, text): Which build of this release to read. Leave blank for the default, which is the pure Ruby build for almost every gem. Fill in the gem and version first and this list loads.

**Outputs**

- `attestations` (list)
- `count` (number)
- `full_name` (text)
- `gem` (text)
- `has_attestations` (true/false)
- `platform` (text)
- `rubygems_url` (text)
- `version` (text)

**Example output**

```json
{
  "attestations": [
    {
      "digest": "zNEaNr/Bcb+cZtWF0UwOzpHAyd3oQKrmDAEY1vXJxSo=",
      "digest_algorithm": "SHA2_256",
      "has_certificate": true,
      "integrated_at": "2026-07-29T15:02:39Z",
      "log_index": 2281082913,
      "log_kind": "hashedrekord",
      "media_type": "application/vnd.dev.sigstore.bundle.v0.3+json",
      "signature": "MEUCICjG5vOXwC8k3KVTd/m2X4/1jo/zGBgJBj32CBUt...",
      "transparency_log_url": "https://search.sigstore.dev/?logIndex=2281082913"
    }
  ],
  "count": 1,
  "full_name": "rails-8.1.3.1",
  "gem": "rails",
  "has_attestations": true,
  "platform": null,
  "rubygems_url": "https://rubygems.org/gems/rails/versions/8.1.3.1",
  "version": "8.1.3.1"
}
```

### Get downloads for a version

Get how often one release of a gem was downloaded, and how often the gem has been downloaded in total. Both numbers come back together with the release's share worked out, so a step can report adoption of a new version without a second call. No API key required.

**Inputs**

- Gem name (`gem`, text, required): The gem to look up, spelled exactly as you would install it. Use 'Find gem names' first if you are not sure of the spelling.
- Version (`version`, text, required): Which release to read. Fill in the gem first and this list loads, newest first, with the date each went out. Yanked releases are not listed, because RubyGems no longer serves them.
- Platform (`platform`, text): Which build of this release to read. Leave blank for the default, which is the pure Ruby build for almost every gem. Fill in the gem and version first and this list loads.

**Outputs**

- `full_name` (text)
- `gem` (text)
- `platform` (text)
- `rubygems_url` (text)
- `total_downloads` (number)
- `version` (text)
- `version_downloads` (number)
- `version_share_percent` (number)

**Example output**

```json
{
  "full_name": "rack-3.2.7",
  "gem": "rack",
  "platform": null,
  "rubygems_url": "https://rubygems.org/gems/rack/versions/3.2.7",
  "total_downloads": 1331697443,
  "version": "3.2.7",
  "version_downloads": 1235527,
  "version_share_percent": 0.09
}
```

### Get the latest version

Get just the newest version number of a gem, and nothing else. The cheapest way to answer 'is the version we pin behind?', so it is the step to put on a schedule to watch a dependency. No API key required.

**Inputs**

- Gem name (`gem`, text, required): The gem to look up, spelled exactly as you would install it. Use 'Find gem names' first if you are not sure of the spelling.

**Outputs**

- `gem` (text)
- `prerelease` (true/false)
- `rubygems_url` (text)
- `version` (text)

**Example output**

```json
{
  "gem": "rack",
  "prerelease": false,
  "rubygems_url": "https://rubygems.org/gems/rack/versions/3.2.7",
  "version": "3.2.7"
}
```

### Get total downloads

Get how many gems have ever been downloaded from RubyGems.org, across every gem and every version. One number for the whole registry, which is the context a single gem's count needs. No API key required.

**Inputs**: None.

**Outputs**

- `total_downloads` (number)
- `total_downloads_readable` (text)

**Example output**

```json
{
  "total_downloads": 263477987718,
  "total_downloads_readable": "263,477,987,718"
}
```

### List a user's gems

List every gem a RubyGems user can push to, with each gem's newest version and download count and the total across all of them. Public, so it works for anyone's username. Use 'List my gems' for the account this connection's key belongs to. No API key required.

**Inputs**

- Username (`user`, text, required): The person's RubyGems username, which is the last part of their profile URL. A numeric user id works too, which is what 'List gem owners' returns.
- Sort by (`sort`, text): How to order the gems that come back. One of: `name` (Gem name, A to Z), `downloads` (Most downloaded first), `newest` (Most recently released first). Default: `name`.
- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `gems` (list)
- `profile_url` (text)
- `sort` (text)
- `total_count` (number)
- `total_downloads` (number)
- `truncated` (true/false)
- `user` (text)

**Example output**

```json
{
  "count": 2,
  "gems": [
    {
      "authors": [
        "Leah Neukirchen"
      ],
      "downloads": 1331696522,
      "homepage_url": "https://github.com/rack/rack",
      "info": "Rack provides a minimal, modular and adaptable interface for developing\nweb applications i...",
      "licenses": [
        "MIT"
      ],
      "name": "rack",
      "platform": "ruby",
      "rubygems_url": "https://rubygems.org/gems/rack",
      "source_code_url": "https://github.com/rack/rack",
      "version": "3.2.7",
      "version_created_at": "2026-08-13T06:57:35.545Z",
      "version_downloads": 1235336,
      "yanked": false
    },
    {
      "authors": [
        "Francis Cianfrocca",
        "Aman Gupta"
      ],
      "downloads": 329386047,
      "homepage_url": "https://github.com/eventmachine/eventmachine",
      "info": "EventMachine implements a fast, single-threaded engine for arbitrary network\ncommunication...",
      "licenses": [
        "Ruby",
        "GPL-2.0"
      ],
      "name": "eventmachine",
      "platform": "ruby",
      "rubygems_url": "https://rubygems.org/gems/eventmachine",
      "source_code_url": "https://github.com/eventmachine/eventmachine",
      "version": "1.2.7",
      "version_created_at": "2018-05-12T13:05:17.295Z",
      "version_downloads": 221030683,
      "yanked": false
    }
  ],
  "profile_url": "https://rubygems.org/profiles/raggi",
  "sort": "downloads",
  "total_count": 25,
  "total_downloads": 1799683980,
  "truncated": true,
  "user": "raggi"
}
```

### List dependent gems

List the gems whose newest release depends on this one, which is the blast radius of a change or a security issue. Narrow it to gems that need this one to run, or only to build and test. No API key required.

**Inputs**

- Gem name (`gem`, text, required): The gem to look up, spelled exactly as you would install it. Use 'Find gem names' first if you are not sure of the spelling.
- Dependency kind (`dependency_scope`, text): Which kind of dependency to count. Both are included by default. One of: `all` (Both kinds of dependency), `runtime` (Runtime only: gems that need this one to run), `development` (Development only: gems that need this one to build or test). Default: `all`.
- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `dependency_scope` (text)
- `gem` (text)
- `gems` (list)
- `rubygems_url` (text)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "count": 3,
  "dependency_scope": "runtime",
  "gem": "shoulda",
  "gems": [
    {
      "name": "beyond_the_api_test_helpers",
      "rubygems_url": "https://rubygems.org/gems/beyond_the_api_test_helpers"
    },
    {
      "name": "bio-band",
      "rubygems_url": "https://rubygems.org/gems/bio-band"
    },
    {
      "name": "cool_extensions",
      "rubygems_url": "https://rubygems.org/gems/cool_extensions"
    }
  ],
  "rubygems_url": "https://rubygems.org/gems/shoulda",
  "total_count": 39,
  "truncated": true
}
```

### List gem owners

List everyone who can push releases of a gem, and in what role: an owner can also manage who else may, a maintainer can only push. Works for any gem, not just your own. An email address shows only for people who chose to publish theirs. No API key required.

**Inputs**

- Gem name (`gem`, text, required): The gem to look up, spelled exactly as you would install it. Use 'Find gem names' first if you are not sure of the spelling.

**Outputs**

- `count` (number)
- `gem` (text)
- `maintainer_count` (number)
- `owner_count` (number)
- `owners` (list)
- `rubygems_url` (text)

**Example output**

```json
{
  "count": 3,
  "gem": "rack",
  "maintainer_count": 0,
  "owner_count": 3,
  "owners": [
    {
      "email": null,
      "handle": "chneukirchen",
      "id": 31711,
      "profile_url": "https://rubygems.org/profiles/chneukirchen",
      "role": "owner"
    },
    {
      "email": null,
      "handle": "raggi",
      "id": 264,
      "profile_url": "https://rubygems.org/profiles/raggi",
      "role": "owner"
    },
    {
      "email": null,
      "handle": "tenderlove",
      "id": 207,
      "profile_url": "https://rubygems.org/profiles/tenderlove",
      "role": "owner"
    }
  ],
  "rubygems_url": "https://rubygems.org/gems/rack"
}
```

### List gem versions

List a gem's releases with the date each went out, how many times it was downloaded and which Ruby it needs. Versions order by RubyGems' own rules rather than as text, so 1.10.0 sits above 1.9.0 and a release above its own release candidates. Only indexed releases are listed, so a yanked one is absent. No API key required.

**Inputs**

- Gem name (`gem`, text, required): The gem to look up, spelled exactly as you would install it. Use 'Find gem names' first if you are not sure of the spelling.
- Sort by (`sort`, text): How to order the releases that come back. One of: `newest` (Newest release first), `oldest` (Oldest release first), `downloads` (Most downloaded first), `number` (Version number as text, A to Z). Default: `newest`.
- Include prereleases (`include_prerelease`, true/false): Turn off to leave out alphas, betas and release candidates, which is what a check for 'is there a new stable release?' wants. On by default. Default: `true`.
- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `distinct_version_count` (number)
- `first_created_at` (text)
- `gem` (text)
- `include_prerelease` (true/false)
- `last_created_at` (text)
- `latest_version` (text)
- `platforms` (list)
- `rubygems_url` (text)
- `sort` (text)
- `total_count` (number)
- `truncated` (true/false)
- `versions` (list)

**Example output**

```json
{
  "count": 2,
  "distinct_version_count": 181,
  "first_created_at": "2009-07-25T18:02:12.000Z",
  "gem": "rack",
  "include_prerelease": true,
  "last_created_at": "2026-08-13T06:57:35.545Z",
  "latest_version": "3.2.7",
  "platforms": [
    "ruby"
  ],
  "rubygems_url": "https://rubygems.org/gems/rack",
  "sort": "newest",
  "total_count": 181,
  "truncated": true,
  "versions": [
    {
      "authors": [
        "Leah Neukirchen"
      ],
      "built_at": "1980-01-02T00:00:00.000Z",
      "created_at": "2026-08-13T06:57:35.545Z",
      "downloads": 1234627,
      "licenses": [
        "MIT"
      ],
      "platform": "ruby",
      "prerelease": false,
      "ruby_version": ">= 2.4.0",
      "rubygems_url": "https://rubygems.org/gems/rack/versions/3.2.7",
      "rubygems_version": ">= 0",
      "sha256": "93e13e1c24f93556671d85d2d79fa228c3485815c50d7e2f265b5330c6528fb7",
      "summary": "A modular Ruby webserver interface.",
      "version": "3.2.7"
    },
    {
      "authors": [
        "Leah Neukirchen"
      ],
      "built_at": "1980-01-02T00:00:00.000Z",
      "created_at": "2026-04-01T06:36:49.542Z",
      "downloads": 29057527,
      "licenses": [
        "MIT"
      ],
      "platform": "ruby",
      "prerelease": false,
      "ruby_version": ">= 2.4.0",
      "rubygems_url": "https://rubygems.org/gems/rack/versions/3.2.6",
      "rubygems_version": ">= 0",
      "sha256": "5ed78e1f73b2e25679bec7d45ee2d4483cc4146eb1be0264fc4d94cb5ef212c2",
      "summary": "A modular Ruby webserver interface.",
      "version": "3.2.6"
    }
  ]
}
```

### List new gems

List the fifty gems most recently published to RubyGems.org for the very first time. These are names that did not exist before, which is what a typosquat watch or a 'what is new in Ruby' digest wants. Use 'List updated gems' for new versions of gems that already existed. No API key required.

**Inputs**

- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `gems` (list)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "count": 2,
  "gems": [
    {
      "authors": [
        "Yudai Takada"
      ],
      "downloads": 5,
      "homepage_url": "https://github.com/ydah/ublk",
      "info": "A native Ruby binding for Linux ublk using io_uring and UBLK_F_USER_COPY.",
      "licenses": [
        "MIT"
      ],
      "name": "ublk",
      "platform": "ruby",
      "rubygems_url": "https://rubygems.org/gems/ublk",
      "source_code_url": "https://github.com/ydah/ublk",
      "version": "1.0.0",
      "version_created_at": "2026-08-23T23:21:26.233Z",
      "version_downloads": 5,
      "yanked": false
    },
    {
      "authors": [
        "Yudai Takada"
      ],
      "downloads": 34,
      "homepage_url": "https://github.com/ydah/fanotify",
      "info": "Monitor Linux filesystem events and respond safely to fanotify permission events.",
      "licenses": [
        "MIT"
      ],
      "name": "fanotify",
      "platform": "ruby",
      "rubygems_url": "https://rubygems.org/gems/fanotify",
      "source_code_url": "https://github.com/ydah/fanotify",
      "version": "1.0.0",
      "version_created_at": "2026-08-23T23:13:12.328Z",
      "version_downloads": 34,
      "yanked": false
    }
  ],
  "total_count": 50,
  "truncated": true
}
```

### List releases in a timeframe

List every release published anywhere on RubyGems.org between two moments. Give it the moment your last run finished and only what has appeared since comes back, so a scheduled workflow sees each release exactly once. RubyGems answers at most seven days at a time. No API key required.

**Inputs**

- From (`start`, date and time, required): The moment to start from. Releases published at or after this are included.
- To (`end`, date and time): The moment to stop at. Leave blank for now. The window may not be longer than seven days, which the step checks before it asks.
- Page (`page`, number): Which page of results to read. RubyGems serves 30 to a page. The answer says whether another page may follow, so a loop can raise this until it does not. Defaults to the first page. At least 1. Default: `1`.
- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `end` (text)
- `has_more_pages` (true/false)
- `page` (number)
- `releases` (list)
- `start` (text)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "count": 2,
  "end": "2026-08-20T01:00:00Z",
  "has_more_pages": false,
  "page": 1,
  "releases": [
    {
      "authors": [
        "davafons"
      ],
      "created_at": "2026-08-20T00:50:05.638Z",
      "downloads": 15208,
      "licenses": [
        "Apache-2.0"
      ],
      "name": "kabosu",
      "platform": "ruby",
      "prerelease": false,
      "rubygems_url": "https://rubygems.org/gems/kabosu/versions/0.6.11.2",
      "source_code_url": null,
      "summary": "Ruby bindings for Sudachi Japanese morphological analyzer",
      "version": "0.6.11.2",
      "version_downloads": 350,
      "yanked": false
    },
    {
      "authors": [
        "davafons"
      ],
      "created_at": "2026-08-20T00:50:04.471Z",
      "downloads": 15208,
      "licenses": [
        "Apache-2.0"
      ],
      "name": "kabosu",
      "platform": "x86_64-linux",
      "prerelease": false,
      "rubygems_url": "https://rubygems.org/gems/kabosu/versions/0.6.11.2-x86_64-linux",
      "source_code_url": null,
      "summary": "Ruby bindings for Sudachi Japanese morphological analyzer",
      "version": "0.6.11.2",
      "version_downloads": 88,
      "yanked": false
    }
  ],
  "start": "2026-08-20T00:00:00Z",
  "total_count": 14,
  "truncated": true
}
```

### List the files in a version

List every file packaged inside one release, each with its SHA-256. The check for 'did this release ship the file I expect, unchanged?'. RubyGems only records this for releases pushed since it started keeping file manifests, so a much older release reports that its contents are unavailable. No API key required.

**Inputs**

- Gem name (`gem`, text, required): The gem to look up, spelled exactly as you would install it. Use 'Find gem names' first if you are not sure of the spelling.
- Version (`version`, text, required): Which release to read. Fill in the gem first and this list loads, newest first, with the date each went out. Yanked releases are not listed, because RubyGems no longer serves them.
- Platform (`platform`, text): Which build of this release to read. Leave blank for the default, which is the pure Ruby build for almost every gem. Fill in the gem and version first and this list loads.
- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `files` (list)
- `gem` (text)
- `platform` (text)
- `rubygems_url` (text)
- `total_count` (number)
- `truncated` (true/false)
- `version` (text)

**Example output**

```json
{
  "count": 3,
  "files": [
    {
      "path": "CHANGELOG.md",
      "sha256": "da7febaa4e597ef5bc12769755ee7aaf4d3729399a81580a9f4cf7aa3a6842b9"
    },
    {
      "path": "CONTRIBUTING.md",
      "sha256": "6fc19811c0de238fe8cb7c926ffcbaf2d491063b2280daa67c357234769ea07f"
    },
    {
      "path": "MIT-LICENSE",
      "sha256": "1b7ebcb5691b416620794892b6ff40473485770dbcc6c63bd33409d4cfd0cefc"
    }
  ],
  "gem": "rack",
  "platform": null,
  "rubygems_url": "https://rubygems.org/gems/rack/versions/3.2.7",
  "total_count": 54,
  "truncated": true,
  "version": "3.2.7"
}
```

### List the most downloaded gems

List the fifty most downloaded gem versions on RubyGems.org, ranked, each with its size, licence and publish date. The picture of what the Ruby ecosystem actually runs on. No API key required.

**Inputs**

- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `gems` (list)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "count": 2,
  "gems": [
    {
      "created_at": "2022-11-25T16:46:38.780Z",
      "downloads": 658384993,
      "full_name": "jmespath-1.6.2",
      "is_latest": true,
      "licenses": [
        "Apache-2.0"
      ],
      "name": "jmespath",
      "platform": "ruby",
      "prerelease": false,
      "rank": 1,
      "rubygems_url": "https://rubygems.org/gems/jmespath/versions/1.6.2",
      "size": 20992,
      "size_readable": "20.5 KB",
      "version": "1.6.2"
    },
    {
      "created_at": "2020-07-10T04:55:35.160Z",
      "downloads": 551245321,
      "full_name": "multi_json-1.15.0",
      "is_latest": false,
      "licenses": [
        "MIT"
      ],
      "name": "multi_json",
      "platform": "ruby",
      "prerelease": false,
      "rank": 2,
      "rubygems_url": "https://rubygems.org/gems/multi_json/versions/1.15.0",
      "size": 22016,
      "size_readable": "21.5 KB",
      "version": "1.15.0"
    }
  ],
  "total_count": 50,
  "truncated": true
}
```

### List updated gems

List the fifty most recent releases published anywhere on RubyGems.org, newest first. Use 'List releases in a timeframe' instead when a scheduled run needs to see every release exactly once rather than the latest fifty. No API key required.

**Inputs**

- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `releases` (list)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "count": 2,
  "releases": [
    {
      "authors": [
        "Na'aman Hirschfeld"
      ],
      "created_at": "2026-08-23T23:29:58.979Z",
      "downloads": 121363,
      "licenses": [
        "MIT"
      ],
      "name": "tree_sitter_language_pack",
      "platform": "ruby",
      "prerelease": false,
      "rubygems_url": "https://rubygems.org/gems/tree_sitter_language_pack/versions/1.15.8",
      "source_code_url": null,
      "summary": "Pre-compiled tree-sitter grammars for 371 programming languages",
      "version": "1.15.8",
      "version_downloads": null,
      "yanked": false
    },
    {
      "authors": [
        "Na'aman Hirschfeld"
      ],
      "created_at": "2026-08-23T23:29:57.490Z",
      "downloads": 121363,
      "licenses": [
        "MIT"
      ],
      "name": "tree_sitter_language_pack",
      "platform": "x86_64-linux",
      "prerelease": false,
      "rubygems_url": "https://rubygems.org/gems/tree_sitter_language_pack/versions/1.15.8-x86_64-linux",
      "source_code_url": null,
      "summary": "Pre-compiled tree-sitter grammars for 371 programming languages",
      "version": "1.15.8",
      "version_downloads": null,
      "yanked": false
    }
  ],
  "total_count": 50,
  "truncated": true
}
```

### Search gems

Search RubyGems.org exactly as its own search box does, across gem names and descriptions. Results come back 30 to a page with each gem's version, licence, author and download count, and the answer says whether another page follows. Use 'Find gem names' when you only need names. No API key required.

**Inputs**

- Search text (`query`, text, required): What to search for. Matches gem names and their descriptions, so a phrase describing the job works as well as a name.
- Page (`page`, number): Which page of results to read. RubyGems serves 30 to a page. The answer says whether another page may follow, so a loop can raise this until it does not. Defaults to the first page. At least 1. Default: `1`.
- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `gems` (list)
- `has_more_pages` (true/false)
- `page` (number)
- `query` (text)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "count": 2,
  "gems": [
    {
      "authors": [
        "Johannes Opper"
      ],
      "downloads": 102376738,
      "homepage_url": "http://github.com/xijo/reverse_markdown",
      "info": "Map simple html back into markdown, e.g. if you want to import existing html data in your...",
      "licenses": [
        "WTFPL"
      ],
      "name": "reverse_markdown",
      "platform": "ruby",
      "rubygems_url": "https://rubygems.org/gems/reverse_markdown",
      "source_code_url": "https://github.com/xijo/reverse_markdown",
      "version": "3.0.2",
      "version_created_at": null,
      "version_downloads": 7440768,
      "yanked": null
    },
    {
      "authors": [
        "Gerald Bauer"
      ],
      "downloads": 312763,
      "homepage_url": "https://github.com/rubylibs/markdown",
      "info": "Markdown Engine Wrapper - Use Your Markdown Library of Choice",
      "licenses": [
        "Public Domain"
      ],
      "name": "markdown",
      "platform": "ruby",
      "rubygems_url": "https://rubygems.org/gems/markdown",
      "source_code_url": null,
      "version": "1.2.1",
      "version_created_at": null,
      "version_downloads": 23566,
      "yanked": null
    }
  ],
  "has_more_pages": true,
  "page": 1,
  "query": "markdown",
  "total_count": 30,
  "truncated": true
}
```
