Projects API

Like it's HTML counterpart project comparisons the projects API allows to query the data for an arbitrary selection of projects.

This allows you to programatically retrieve data for gems and their GitHub source repositories in a single place, as well as additional metrics specific to the Ruby Toolbox like popularity scores and project health status.

The API has currently no rate-limiting policy, however please use it reasonably. If you need larger scale access to data for analysis please use our production database exports instead.

A simple ruby API client is available on rubygems as rubytoolbox-api.

GET /api/projects/compare/rubocop,rspec-expectations,oj

This endpoint is limited to 100 projects per request. If you request more than that you will receive an error. Please batch requests in groups to retrieve more projects.


{
  "projects": [
    {
      "permalink": "oj",
      "categories": [
        {
          "permalink": "JSON_Parsers",
          "category_group": {
            "permalink": "Web_Apps_Services_Interaction",
            "description": null,
            "name": "Web Apps, Services & Interaction"
          },
          "description": "JSON parsers convert data serialized in the popular JSON data exchange format to and from Ruby objects",
          "name": "JSON Parsers",
          "urls": {
            "toolbox_url": "https://www.ruby-toolbox.com/categories/JSON_Parsers"
          }
        }
      ],
      "description": "The fastest JSON parser and object serializer.",
      "github_repo": {
        "path": "ohler55/oj",
        "average_recent_committed_at": "2024-01-19 09:34:13 UTC",
        "description": "Optimized JSON",
        "is_archived": false,
        "is_fork": false,
        "is_mirror": false,
        "issues": {
          "url": "https://github.com/ohler55/oj/issues",
          "open_count": 14,
          "closed_count": 567,
          "total_count": 581,
          "closure_rate": "97.59"
        },
        "license": "mit",
        "primary_language": "C",
        "pull_requests": {
          "url": "https://github.com/ohler55/oj/pulls",
          "open_count": 1,
          "closed_count": 39,
          "merged_count": 308,
          "total_count": 348,
          "acceptance_rate": "88.51"
        },
        "repo_pushed_at": "2024-12-14 20:28:41 UTC",
        "stats": {
          "stargazers_count": 3161,
          "forks_count": 246,
          "watchers_count": 39
        },
        "url": "https://github.com/ohler55/oj",
        "wiki_url": null
      },
      "health": {
        "overall_level": "green",
        "statuses": [
          {
            "key": "rubygem_long_running",
            "icon": "diamond",
            "label": "A long-lived project that still receives updates",
            "level": "green"
          }
        ]
      },
      "name": "oj",
      "rubygem": {
        "name": "oj",
        "current_version": "3.16.8",
        "first_release_on": "2012-02-19",
        "latest_release_on": "2024-12-14",
        "licenses": [
          "MIT"
        ],
        "stats": {
          "downloads": 222354411,
          "reverse_dependencies_count": 830,
          "quarterly_release_counts": {
            "2012-1": 18,
            "2012-2": 10,
            "2012-3": 6,
            "2012-4": 12,
            "2013-1": 10,
            "2013-2": 8,
            "2013-3": 1,
            "2013-4": 12,
            "2014-1": 8,
            "2014-2": 13,
            "2014-3": 4,
            "2014-4": 4,
            "2015-1": 6,
            "2015-2": 8,
            "2015-3": 5,
            "2015-4": 6,
            "2016-1": 4,
            "2016-2": 3,
            "2016-3": 5,
            "2016-4": 2,
            "2017-1": 5,
            "2017-2": 17,
            "2017-3": 8,
            "2017-4": 4,
            "2018-1": 2,
            "2018-2": 4,
            "2018-3": 8,
            "2018-4": 9,
            "2019-1": 5,
            "2019-2": 1,
            "2019-3": 4,
            "2019-4": 2,
            "2020-1": 4,
            "2020-2": 1,
            "2020-3": 8,
            "2020-4": 4,
            "2021-1": 4,
            "2021-2": 4,
            "2021-3": 14,
            "2021-4": 2,
            "2022-1": 1,
            "2022-2": 3,
            "2022-3": 7,
            "2022-4": 2,
            "2023-1": 3,
            "2023-2": 2,
            "2023-3": 3,
            "2023-4": 2,
            "2024-2": 1,
            "2024-3": 2,
            "2024-4": 2
          },
          "releases_count": 283
        },
        "url": "https://rubygems.org/gems/oj"
      },
      "score": "5.7",
      "urls": {
        "bug_tracker_url": "https://github.com/ohler55/oj/issues",
        "changelog_url": null,
        "documentation_url": "http://www.ohler.com/oj/doc/index.html",
        "homepage_url": "http://www.ohler.com/oj/",
        "mailing_list_url": null,
        "source_code_url": "https://github.com/ohler55/oj",
        "toolbox_url": "https://www.ruby-toolbox.com/projects/oj",
        "wiki_url": "https://github.com/ohler55/oj/wiki"
      }
    },
    {
      "permalink": "rspec-expectations",
      "categories": [],
      "description": "rspec-expectations provides a simple, readable API to express expected outcomes of a code example.",
      "github_repo": {
        "path": "rspec/rspec-expectations",
        "average_recent_committed_at": "2024-07-12 01:00:30 UTC",
        "description": "Provides a readable API to express expected outcomes of a code example",
        "is_archived": true,
        "is_fork": false,
        "is_mirror": false,
        "issues": {
          "url": "https://github.com/rspec/rspec-expectations/issues",
          "open_count": 0,
          "closed_count": 493,
          "total_count": 493,
          "closure_rate": "100.0"
        },
        "license": "mit",
        "primary_language": "Ruby",
        "pull_requests": {
          "url": "https://github.com/rspec/rspec-expectations/pulls",
          "open_count": 0,
          "closed_count": 231,
          "merged_count": 714,
          "total_count": 945,
          "acceptance_rate": "75.56"
        },
        "repo_pushed_at": "2024-11-30 12:37:23 UTC",
        "stats": {
          "stargazers_count": 1260,
          "forks_count": 391,
          "watchers_count": 43
        },
        "url": "https://github.com/rspec/rspec-expectations",
        "wiki_url": null
      },
      "health": {
        "overall_level": "red",
        "statuses": [
          {
            "key": "github_repo_archived",
            "icon": "github",
            "label": "Repository is archived",
            "level": "red"
          },
          {
            "key": "rubygem_long_running",
            "icon": "diamond",
            "label": "A long-lived project that still receives updates",
            "level": "green"
          }
        ]
      },
      "name": "rspec-expectations",
      "rubygem": {
        "name": "rspec-expectations",
        "current_version": "3.13.3",
        "first_release_on": "2009-09-16",
        "latest_release_on": "2024-09-07",
        "licenses": [
          "MIT"
        ],
        "stats": {
          "downloads": 952318052,
          "reverse_dependencies_count": 490,
          "quarterly_release_counts": {
            "2009-3": 1,
            "2010-1": 13,
            "2010-2": 11,
            "2010-3": 6,
            "2010-4": 6,
            "2011-1": 2,
            "2011-2": 4,
            "2011-4": 4,
            "2012-1": 3,
            "2012-2": 2,
            "2012-3": 4,
            "2012-4": 2,
            "2013-1": 1,
            "2013-2": 1,
            "2013-3": 4,
            "2013-4": 3,
            "2014-1": 3,
            "2014-2": 7,
            "2014-3": 6,
            "2015-1": 1,
            "2015-2": 2,
            "2015-3": 1,
            "2015-4": 1,
            "2016-1": 2,
            "2016-2": 2,
            "2016-3": 1,
            "2016-4": 2,
            "2017-2": 1,
            "2017-4": 1,
            "2018-3": 2,
            "2018-4": 1,
            "2019-2": 2,
            "2019-4": 3,
            "2020-1": 1,
            "2020-2": 1,
            "2020-4": 4,
            "2022-1": 2,
            "2022-3": 1,
            "2022-4": 2,
            "2023-1": 1,
            "2023-2": 1,
            "2024-1": 2,
            "2024-2": 1,
            "2024-3": 2
          },
          "releases_count": 123
        },
        "url": "https://rubygems.org/gems/rspec-expectations"
      },
      "score": "20.25",
      "urls": {
        "bug_tracker_url": "https://github.com/rspec/rspec-expectations/issues",
        "changelog_url": null,
        "documentation_url": "https://rspec.info/documentation/",
        "homepage_url": "https://github.com/rspec/rspec-expectations",
        "mailing_list_url": "https://groups.google.com/forum/#!forum/rspec",
        "source_code_url": "https://github.com/rspec/rspec-expectations",
        "toolbox_url": "https://www.ruby-toolbox.com/projects/rspec-expectations",
        "wiki_url": null
      }
    },
    {
      "permalink": "rubocop",
      "categories": [
        {
          "permalink": "code_metrics",
          "category_group": {
            "permalink": "Code_Quality",
            "description": null,
            "name": "Code Quality"
          },
          "description": "Utilities to improve code quality by reporting common code smells like complexity, unsafe defaults, unused variables or stylistic inconsistencies",
          "name": "Code Metrics",
          "urls": {
            "toolbox_url": "https://www.ruby-toolbox.com/categories/code_metrics"
          }
        }
      ],
      "description": "RuboCop is a Ruby code style checking and code formatting tool.\nIt aims to enforce the community-driven Ruby Style Guide.\n",
      "github_repo": {
        "path": "rubocop/rubocop",
        "average_recent_committed_at": "2024-12-12 02:26:44 UTC",
        "description": "A Ruby static code analyzer and formatter, based on the community Ruby style guide.",
        "is_archived": false,
        "is_fork": false,
        "is_mirror": false,
        "issues": {
          "url": "https://github.com/rubocop/rubocop/issues",
          "open_count": 345,
          "closed_count": 5429,
          "total_count": 5774,
          "closure_rate": "94.02"
        },
        "license": "mit",
        "primary_language": "Ruby",
        "pull_requests": {
          "url": "https://github.com/rubocop/rubocop/pulls",
          "open_count": 54,
          "closed_count": 675,
          "merged_count": 6855,
          "total_count": 7584,
          "acceptance_rate": "90.39"
        },
        "repo_pushed_at": "2024-12-20 07:01:30 UTC",
        "stats": {
          "stargazers_count": 12664,
          "forks_count": 3023,
          "watchers_count": 182
        },
        "url": "https://github.com/rubocop/rubocop",
        "wiki_url": null
      },
      "health": {
        "overall_level": "green",
        "statuses": [
          {
            "key": "rubygem_long_running",
            "icon": "diamond",
            "label": "A long-lived project that still receives updates",
            "level": "green"
          }
        ]
      },
      "name": "rubocop",
      "rubygem": {
        "name": "rubocop",
        "current_version": "1.69.2",
        "first_release_on": "2012-05-03",
        "latest_release_on": "2024-12-12",
        "licenses": [
          "MIT"
        ],
        "stats": {
          "downloads": 484579295,
          "reverse_dependencies_count": 11192,
          "quarterly_release_counts": {
            "2012-2": 1,
            "2012-4": 1,
            "2013-1": 4,
            "2013-2": 18,
            "2013-3": 8,
            "2013-4": 4,
            "2014-1": 5,
            "2014-2": 6,
            "2014-3": 4,
            "2014-4": 3,
            "2015-1": 2,
            "2015-2": 5,
            "2015-3": 4,
            "2015-4": 2,
            "2016-1": 6,
            "2016-2": 3,
            "2016-3": 3,
            "2016-4": 4,
            "2017-1": 3,
            "2017-2": 3,
            "2017-3": 1,
            "2017-4": 3,
            "2018-1": 2,
            "2018-2": 5,
            "2018-3": 6,
            "2018-4": 3,
            "2019-1": 6,
            "2019-2": 9,
            "2019-3": 3,
            "2019-4": 4,
            "2020-1": 3,
            "2020-2": 7,
            "2020-3": 9,
            "2020-4": 16,
            "2021-1": 7,
            "2021-2": 9,
            "2021-3": 8,
            "2021-4": 6,
            "2022-1": 4,
            "2022-2": 10,
            "2022-3": 8,
            "2022-4": 7,
            "2023-1": 10,
            "2023-2": 9,
            "2023-3": 10,
            "2023-4": 5,
            "2024-1": 6,
            "2024-2": 8,
            "2024-3": 4,
            "2024-4": 5
          },
          "releases_count": 282
        },
        "url": "https://rubygems.org/gems/rubocop"
      },
      "score": "17.26",
      "urls": {
        "bug_tracker_url": "https://github.com/rubocop/rubocop/issues",
        "changelog_url": null,
        "documentation_url": "https://docs.rubocop.org/rubocop/1.69/",
        "homepage_url": "https://rubocop.org/",
        "mailing_list_url": null,
        "source_code_url": "https://github.com/rubocop/rubocop/",
        "toolbox_url": "https://www.ruby-toolbox.com/projects/rubocop",
        "wiki_url": null
      }
    }
  ]
}