From 12758b7456dc6485a375df0ec1f676506c4a4fab Mon Sep 17 00:00:00 2001 From: Piotr Monwid-Olechnowicz Date: Wed, 10 Sep 2025 14:08:40 +0200 Subject: [PATCH 1/4] Fix the /code page --- src/app/conf/_design-system/button.tsx | 22 +- src/app/conf/_design-system/tag.tsx | 3 +- src/components/card.tsx | 2 +- src/components/tools-and-libraries.tsx | 163 ++-- src/get-github-info.ts | 1 + src/github-stats.json | 1243 +++++++++++++++++++++++- 6 files changed, 1355 insertions(+), 79 deletions(-) diff --git a/src/app/conf/_design-system/button.tsx b/src/app/conf/_design-system/button.tsx index 9dabcbb7ca..c3b1e4a074 100644 --- a/src/app/conf/_design-system/button.tsx +++ b/src/app/conf/_design-system/button.tsx @@ -9,6 +9,7 @@ export declare namespace ButtonProps { export interface BaseProps { size?: Size variant?: Variant + isIconButton?: boolean } export interface AnchorProps @@ -58,13 +59,21 @@ export type ButtonProps = export function Button(props: ButtonProps) { const className = clsx( "relative flex items-center justify-center gap-2.5 font-normal text-base/none text-neu-0 bg-neu-900 hover:bg-neu-800 active:bg-neu-700 font-sans h-14 px-8 data-[size=md]:h-12 data-[variant=secondary]:bg-neu-100 dark:data-[variant=secondary]:bg-neu-100/80 dark:data-[variant=secondary]:hover:bg-neu-200/50 data-[variant=secondary]:text-neu-900 data-[variant=secondary]:hover:bg-neu-200/75 data-[variant=secondary]:active:bg-neu-200/90 data-[variant=tertiary]:bg-neu-100 data-[variant=tertiary]:text-neu-900 data-[variant=tertiary]:hover:bg-neu-200 data-[variant=tertiary]:active:bg-neu-300 gql-focus-visible [aria-disabled]:bg-neu-800 aria-disabled:pointer-events-none dark:data-[variant=tertiary]:bg-neu-900/10 dark:data-[variant=tertiary]:text-neu-900 dark:data-[variant=tertiary]:hover:bg-neu-900/[.125] dark:data-[variant=tertiary]:active:bg-neu-800/20 dark:data-[variant=tertiary]:ring-1 dark:data-[variant=tertiary]:ring-inset dark:data-[variant=tertiary]:ring-neu-900/20", + props.isIconButton && "!p-2 h-min", props.className, ) const styleAttrs = { "data-size": props.size, "data-variant": props.variant } if ("href" in props && typeof props.href === "string") { - const { className: _1, size: _2, disabled, children, ...rest } = props + const { + className: _1, + size: _2, + isIconButton: _3, + disabled, + children, + ...rest + } = props if (disabled) (rest as { href?: string }).href = undefined @@ -81,7 +90,14 @@ export function Button(props: ButtonProps) { } if (props.as) { - const { className: _1, size: _2, children, as, ...rest } = props + const { + className: _1, + size: _2, + isIconButton: _3, + children, + as, + ...rest + } = props const Root = as as "span" // we don't need HTMLDivElement type return ( @@ -90,7 +106,7 @@ export function Button(props: ButtonProps) { ) } - const { className: _1, size: _2, children, ...rest } = props + const { className: _1, size: _2, isIconButton: _3, children, ...rest } = props return ( + )} + {github && ( + + )} + {npm && ( + + )} + {gem && ( + + )} + + ) +} diff --git a/src/get-github-info.ts b/src/get-github-info.ts index 48cf01e237..5ce37a7843 100644 --- a/src/get-github-info.ts +++ b/src/get-github-info.ts @@ -3,6 +3,7 @@ import fs from "fs/promises" import grayMatter from "gray-matter" import { getGitHubStats } from "../scripts/sort-libraries/get-github-stats" +// todo: aggregate errors, merge results instead of overwriting async function main() { const filePaths = await fg("./src/code/**/*.md") diff --git a/src/github-stats.json b/src/github-stats.json index 9e26dfeeb6..9d76c6dea2 100644 --- a/src/github-stats.json +++ b/src/github-stats.json @@ -1 +1,1242 @@ -{} \ No newline at end of file +{ + "altair-graphql/altair": { + "hasCommitsInLast3Months": false, + "stars": 5331, + "formattedStars": "5k", + "license": "MIT License", + "lastRelease": "2025-05-29T16:34:43Z", + "formattedLastRelease": "3 months ago" + }, + "apache/apisix": { + "hasCommitsInLast3Months": false, + "stars": 15597, + "formattedStars": "16k", + "license": "Apache License 2.0", + "lastRelease": "2025-06-27T07:28:29Z", + "formattedLastRelease": "2 months ago" + }, + "apollographql/apollo-studio-community": { + "hasCommitsInLast3Months": false, + "stars": 258, + "formattedStars": "258", + "license": "Unknown", + "lastRelease": "", + "formattedLastRelease": "" + }, + "ChilliCream/hotchocolate": { + "hasCommitsInLast3Months": false, + "stars": 5592, + "formattedStars": "6k", + "license": "MIT License", + "lastRelease": "2025-09-09T09:29:52Z", + "formattedLastRelease": "23 hours ago" + }, + "dgraph-io/dgraph": { + "hasCommitsInLast3Months": false, + "stars": 21217, + "formattedStars": "21k", + "license": "Apache License 2.0", + "lastRelease": "2025-08-18T17:32:20Z", + "formattedLastRelease": "3 weeks ago" + }, + "yahoo/elide": { + "hasCommitsInLast3Months": false, + "stars": 1018, + "formattedStars": "1k", + "license": "Other", + "lastRelease": "2025-09-01T03:57:54Z", + "formattedLastRelease": "1 week ago" + }, + "graphapi-io/resources": { + "hasCommitsInLast3Months": false, + "stars": 3, + "formattedStars": "3", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "hasura/graphql-engine": { + "hasCommitsInLast3Months": false, + "stars": 31693, + "formattedStars": "32k", + "license": "Apache License 2.0", + "lastRelease": "2025-08-19T12:12:37Z", + "formattedLastRelease": "3 weeks ago" + }, + "Kong/insomnia": { + "hasCommitsInLast3Months": false, + "stars": 37123, + "formattedStars": "37k", + "license": "Apache License 2.0", + "lastRelease": "2025-09-05T08:10:58Z", + "formattedLastRelease": "5 days ago" + }, + "postmanlabs/postman-app-support": { + "hasCommitsInLast3Months": false, + "stars": 5951, + "formattedStars": "6k", + "license": "Unknown", + "lastRelease": "", + "formattedLastRelease": "" + }, + "stepzen-dev/examples": { + "hasCommitsInLast3Months": false, + "stars": 45, + "formattedStars": "45", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "TykTechnologies/tyk": { + "hasCommitsInLast3Months": false, + "stars": 10362, + "formattedStars": "10k", + "license": "Other", + "lastRelease": "2025-08-07T14:37:50Z", + "formattedLastRelease": "1 month ago" + }, + "twinlogix/typetta": { + "hasCommitsInLast3Months": false, + "stars": 115, + "formattedStars": "115", + "license": "Apache License 2.0", + "lastRelease": "2023-10-16T07:50:50Z", + "formattedLastRelease": "1 year ago" + }, + "webiny/webiny-js": { + "hasCommitsInLast3Months": false, + "stars": 7833, + "formattedStars": "8k", + "license": "Other", + "lastRelease": "2025-09-05T07:39:55Z", + "formattedLastRelease": "5 days ago" + }, + "oliyh/re-graph": { + "hasCommitsInLast3Months": false, + "stars": 466, + "formattedStars": "466", + "license": "Unknown", + "lastRelease": "2022-07-20T09:24:02Z", + "formattedLastRelease": "3 years ago" + }, + "alumbra/alumbra": { + "hasCommitsInLast3Months": false, + "stars": 148, + "formattedStars": "148", + "license": "MIT License", + "lastRelease": "2017-06-12T12:14:25Z", + "formattedLastRelease": "8 years ago" + }, + "tendant/graphql-clj": { + "hasCommitsInLast3Months": false, + "stars": 285, + "formattedStars": "285", + "license": "Eclipse Public License 1.0", + "lastRelease": "", + "formattedLastRelease": "" + }, + "walmartlabs/lacinia": { + "hasCommitsInLast3Months": false, + "stars": 1839, + "formattedStars": "2k", + "license": "Other", + "lastRelease": "", + "formattedLastRelease": "" + }, + "graphql-dotnet/graphql-client": { + "hasCommitsInLast3Months": false, + "stars": 639, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2024-05-21T07:06:30Z", + "formattedLastRelease": "1 year ago" + }, + "bkniffler/graphql-net-client": { + "hasCommitsInLast3Months": false, + "stars": 94, + "formattedStars": "94", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "linq2graphql/linq2graphql.client": { + "hasCommitsInLast3Months": false, + "stars": 8, + "formattedStars": "8", + "license": "MIT License", + "lastRelease": "2025-08-25T10:04:54Z", + "formattedLastRelease": "2 weeks ago" + }, + "sahb1239/SAHB.GraphQLClient": { + "hasCommitsInLast3Months": false, + "stars": 44, + "formattedStars": "44", + "license": "MIT License", + "lastRelease": "2020-05-17T10:50:58Z", + "formattedLastRelease": "5 years ago" + }, + "byme8/ZeroQL": { + "hasCommitsInLast3Months": false, + "stars": 310, + "formattedStars": "310", + "license": "MIT License", + "lastRelease": "2025-06-17T12:39:08Z", + "formattedLastRelease": "2 months ago" + }, + "EntityGraphQL/EntityGraphQL": { + "hasCommitsInLast3Months": false, + "stars": 447, + "formattedStars": "447", + "license": "MIT License", + "lastRelease": "2025-08-12T06:40:41Z", + "formattedLastRelease": "4 weeks ago" + }, + "graphql-dotnet/graphql-dotnet": { + "hasCommitsInLast3Months": false, + "stars": 5959, + "formattedStars": "6k", + "license": "MIT License", + "lastRelease": "2025-04-13T20:07:34Z", + "formattedLastRelease": "4 months ago" + }, + "chkimes/graphql-net": { + "hasCommitsInLast3Months": false, + "stars": 889, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "rivantsov/ngraphql": { + "hasCommitsInLast3Months": false, + "stars": 46, + "formattedStars": "46", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "graphql/libgraphqlparser": { + "hasCommitsInLast3Months": false, + "stars": 1099, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2017-10-16T21:47:42Z", + "formattedLastRelease": "7 years ago" + }, + "burner/graphqld": { + "hasCommitsInLast3Months": false, + "stars": 35, + "formattedStars": "35", + "license": "GNU Lesser General Public License v3.0", + "lastRelease": "2024-05-14T13:42:29Z", + "formattedLastRelease": "1 year ago" + }, + "annkissam/common_graphql_client": { + "hasCommitsInLast3Months": false, + "stars": 42, + "formattedStars": "42", + "license": "MIT License", + "lastRelease": "2020-05-05T16:48:50Z", + "formattedLastRelease": "5 years ago" + }, + "uesteibar/neuron": { + "hasCommitsInLast3Months": false, + "stars": 332, + "formattedStars": "332", + "license": "Other", + "lastRelease": "", + "formattedLastRelease": "" + }, + "absinthe-graphql/absinthe": { + "hasCommitsInLast3Months": false, + "stars": 4353, + "formattedStars": "4k", + "license": "Other", + "lastRelease": "2025-06-09T16:38:08Z", + "formattedLastRelease": "3 months ago" + }, + "graphql-elixir/graphql": { + "hasCommitsInLast3Months": false, + "stars": 857, + "formattedStars": "1k", + "license": "Other", + "lastRelease": "2016-09-09T04:49:46Z", + "formattedLastRelease": "9 years ago" + }, + "ballerina-platform/module-ballerina-graphql": { + "hasCommitsInLast3Months": false, + "stars": 139, + "formattedStars": "139", + "license": "Apache License 2.0", + "lastRelease": "2025-04-11T01:29:10Z", + "formattedLastRelease": "5 months ago" + }, + "jlouis/graphql-erlang": { + "hasCommitsInLast3Months": false, + "stars": 314, + "formattedStars": "314", + "license": "Other", + "lastRelease": "2018-06-22T12:35:43Z", + "formattedLastRelease": "7 years ago" + }, + "gql-dart/ferry": { + "hasCommitsInLast3Months": false, + "stars": 625, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "zino-app/graphql-flutter": { + "hasCommitsInLast3Months": false, + "stars": 3267, + "formattedStars": "3k", + "license": "MIT License", + "lastRelease": "2025-09-07T10:05:12Z", + "formattedLastRelease": "2 days ago" + }, + "dosco/graphjin": { + "hasCommitsInLast3Months": false, + "stars": 2992, + "formattedStars": "3k", + "license": "Apache License 2.0", + "lastRelease": "2025-06-22T17:03:58Z", + "formattedLastRelease": "2 months ago" + }, + "99designs/gqlgen": { + "hasCommitsInLast3Months": false, + "stars": 10469, + "formattedStars": "10k", + "license": "MIT License", + "lastRelease": "2025-07-27T23:09:18Z", + "formattedLastRelease": "1 month ago" + }, + "andrewwphillips/eggql": { + "hasCommitsInLast3Months": false, + "stars": 40, + "formattedStars": "40", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "appointy/jaal": { + "hasCommitsInLast3Months": false, + "stars": 78, + "formattedStars": "78", + "license": "MIT License", + "lastRelease": "2020-04-18T08:53:19Z", + "formattedLastRelease": "5 years ago" + }, + "graph-gophers/graphql-go": { + "hasCommitsInLast3Months": false, + "stars": 4720, + "formattedStars": "5k", + "license": "BSD 2-Clause \"Simplified\" License", + "lastRelease": "2025-09-09T11:37:07Z", + "formattedLastRelease": "21 hours ago" + }, + "graphql-go/graphql": { + "hasCommitsInLast3Months": false, + "stars": 10099, + "formattedStars": "10k", + "license": "MIT License", + "lastRelease": "2023-04-10T18:20:23Z", + "formattedLastRelease": "2 years ago" + }, + "graphql-go/relay": { + "hasCommitsInLast3Months": false, + "stars": 425, + "formattedStars": "425", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "samsarahq/thunder": { + "hasCommitsInLast3Months": false, + "stars": 1580, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "wundergraph/graphql-go-tools": { + "hasCommitsInLast3Months": false, + "stars": 777, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2025-09-09T14:14:55Z", + "formattedLastRelease": "19 hours ago" + }, + "Khan/genqlient": { + "hasCommitsInLast3Months": false, + "stars": 1242, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2025-05-18T19:09:08Z", + "formattedLastRelease": "3 months ago" + }, + "hasura/go-graphql-client": { + "hasCommitsInLast3Months": false, + "stars": 448, + "formattedStars": "448", + "license": "MIT License", + "lastRelease": "2025-06-20T03:17:26Z", + "formattedLastRelease": "2 months ago" + }, + "shurcooL/graphql": { + "hasCommitsInLast3Months": false, + "stars": 727, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "machinebox/graphql": { + "hasCommitsInLast3Months": false, + "stars": 960, + "formattedStars": "1k", + "license": "Apache License 2.0", + "lastRelease": "2018-05-31T14:28:32Z", + "formattedLastRelease": "7 years ago" + }, + "grails/gorm-graphql": { + "hasCommitsInLast3Months": false, + "stars": 81, + "formattedStars": "81", + "license": "Unknown", + "lastRelease": "2023-12-08T10:48:05Z", + "formattedLastRelease": "1 year ago" + }, + "grooviter/gql": { + "hasCommitsInLast3Months": false, + "stars": 49, + "formattedStars": "49", + "license": "Apache License 2.0", + "lastRelease": "2024-11-05T10:13:23Z", + "formattedLastRelease": "10 months ago" + }, + "morpheusgraphql/morpheus-graphql": { + "hasCommitsInLast3Months": false, + "stars": 417, + "formattedStars": "417", + "license": "MIT License", + "lastRelease": "2024-06-10T08:34:35Z", + "formattedLastRelease": "1 year ago" + }, + "jasonsychau/graphql-w-persistent": { + "hasCommitsInLast3Months": false, + "stars": 10, + "formattedStars": "10", + "license": "Unknown", + "lastRelease": "", + "formattedLastRelease": "" + }, + "higherkindness/mu-haskell": { + "hasCommitsInLast3Months": false, + "stars": 334, + "formattedStars": "334", + "license": "Apache License 2.0", + "lastRelease": "2021-01-11T11:19:38Z", + "formattedLastRelease": "4 years ago" + }, + "dillonkearns/elm-graphql": { + "hasCommitsInLast3Months": false, + "stars": 782, + "formattedStars": "1k", + "license": "BSD 3-Clause \"New\" or \"Revised\" License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "apollographql/apollo-kotlin": { + "hasCommitsInLast3Months": false, + "stars": 3897, + "formattedStars": "4k", + "license": "MIT License", + "lastRelease": "2025-08-21T15:31:08Z", + "formattedLastRelease": "2 weeks ago" + }, + "ExpediaGroup/graphql-kotlin": { + "hasCommitsInLast3Months": false, + "stars": 1778, + "formattedStars": "2k", + "license": "Apache License 2.0", + "lastRelease": "2025-06-16T17:02:18Z", + "formattedLastRelease": "2 months ago" + }, + "americanexpress/nodes": { + "hasCommitsInLast3Months": false, + "stars": 308, + "formattedStars": "308", + "license": "Apache License 2.0", + "lastRelease": "2019-07-13T22:47:01Z", + "formattedLastRelease": "6 years ago" + }, + "graphql-java-generator/graphql-gradle-plugin-project": { + "hasCommitsInLast3Months": false, + "stars": 56, + "formattedStars": "56", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "graphql-calculator/graphql-calculator": { + "hasCommitsInLast3Months": false, + "stars": 113, + "formattedStars": "113", + "license": "Apache License 2.0", + "lastRelease": "2021-09-03T01:56:25Z", + "formattedLastRelease": "4 years ago" + }, + "graphql-java-kickstart/graphql-spring-boot": { + "hasCommitsInLast3Months": false, + "stars": 1512, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "2023-12-07T11:07:47Z", + "formattedLastRelease": "1 year ago" + }, + "graphql-java/graphql-java": { + "hasCommitsInLast3Months": false, + "stars": 6196, + "formattedStars": "6k", + "license": "MIT License", + "lastRelease": "2025-08-01T00:17:34Z", + "formattedLastRelease": "1 month ago" + }, + "babyfish-ct/jimmer": { + "hasCommitsInLast3Months": false, + "stars": 1473, + "formattedStars": "1k", + "license": "Apache License 2.0", + "lastRelease": "2025-09-05T14:14:35Z", + "formattedLastRelease": "4 days ago" + }, + "aPureBase/KGraphQL": { + "hasCommitsInLast3Months": false, + "stars": 309, + "formattedStars": "309", + "license": "MIT License", + "lastRelease": "2023-01-27T10:09:55Z", + "formattedLastRelease": "2 years ago" + }, + "eclipse/microprofile-graphql": { + "hasCommitsInLast3Months": false, + "stars": 102, + "formattedStars": "102", + "license": "Apache License 2.0", + "lastRelease": "2022-03-21T18:26:51Z", + "formattedLastRelease": "3 years ago" + }, + "netflix/dgs-framework": { + "hasCommitsInLast3Months": false, + "stars": 3256, + "formattedStars": "3k", + "license": "Apache License 2.0", + "lastRelease": "2025-08-27T00:04:38Z", + "formattedLastRelease": "2 weeks ago" + }, + "spring-projects/spring-graphql": { + "hasCommitsInLast3Months": false, + "stars": 1569, + "formattedStars": "2k", + "license": "Apache License 2.0", + "lastRelease": "2025-08-19T12:50:32Z", + "formattedLastRelease": "3 weeks ago" + }, + "apollographql/apollo-server": { + "hasCommitsInLast3Months": false, + "stars": 13915, + "formattedStars": "14k", + "license": "MIT License", + "lastRelease": "2025-07-17T16:58:26Z", + "formattedLastRelease": "1 month ago" + }, + "badbatch/graphql-box": { + "hasCommitsInLast3Months": false, + "stars": 27, + "formattedStars": "27", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "graphql/graphql-http": { + "hasCommitsInLast3Months": false, + "stars": 350, + "formattedStars": "350", + "license": "MIT License", + "lastRelease": "2025-01-17T14:16:52Z", + "formattedLastRelease": "7 months ago" + }, + "graphql/graphql-js": { + "hasCommitsInLast3Months": false, + "stars": 20230, + "formattedStars": "20k", + "license": "MIT License", + "lastRelease": "2025-06-11T16:37:17Z", + "formattedLastRelease": "2 months ago" + }, + "enisdenjo/graphql-sse": { + "hasCommitsInLast3Months": false, + "stars": 428, + "formattedStars": "428", + "license": "MIT License", + "lastRelease": "2025-01-10T11:57:20Z", + "formattedLastRelease": "7 months ago" + }, + "enisdenjo/graphql-ws": { + "hasCommitsInLast3Months": false, + "stars": 1832, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "2025-07-14T12:15:37Z", + "formattedLastRelease": "1 month ago" + }, + "mercurius-js/mercurius": { + "hasCommitsInLast3Months": false, + "stars": 2439, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "2025-06-19T08:04:40Z", + "formattedLastRelease": "2 months ago" + }, + "getcronit/pylon": { + "hasCommitsInLast3Months": false, + "stars": 331, + "formattedStars": "331", + "license": "Apache License 2.0", + "lastRelease": "2025-05-14T09:11:09Z", + "formattedLastRelease": "3 months ago" + }, + "networkimprov/brangr": { + "hasCommitsInLast3Months": false, + "stars": 4, + "formattedStars": "4", + "license": "Mozilla Public License 2.0", + "lastRelease": "2023-06-02T09:20:18Z", + "formattedLastRelease": "2 years ago" + }, + "hayes/giraphql": { + "hasCommitsInLast3Months": false, + "stars": 2521, + "formattedStars": "3k", + "license": "ISC License", + "lastRelease": "2025-09-07T21:17:51Z", + "formattedLastRelease": "2 days ago" + }, + "graphql/graphiql": { + "hasCommitsInLast3Months": false, + "stars": 16624, + "formattedStars": "17k", + "license": "MIT License", + "lastRelease": "2025-07-19T17:43:48Z", + "formattedLastRelease": "1 month ago" + }, + "Urigo/graphql-cli": { + "hasCommitsInLast3Months": false, + "stars": 2018, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "2020-10-07T12:54:45Z", + "formattedLastRelease": "4 years ago" + }, + "dotansimha/graphql-code-generator": { + "hasCommitsInLast3Months": false, + "stars": 11139, + "formattedStars": "11k", + "license": "MIT License", + "lastRelease": "2025-09-07T17:01:52Z", + "formattedLastRelease": "2 days ago" + }, + "graphql/graphql-language-service": { + "hasCommitsInLast3Months": false, + "stars": 418, + "formattedStars": "418", + "license": "Unknown", + "lastRelease": "", + "formattedLastRelease": "" + }, + "n1ru4l/graphql-live-query": { + "hasCommitsInLast3Months": false, + "stars": 437, + "formattedStars": "437", + "license": "MIT License", + "lastRelease": "2022-07-29T09:27:53Z", + "formattedLastRelease": "3 years ago" + }, + "Urigo/graphql-mesh": { + "hasCommitsInLast3Months": false, + "stars": 3424, + "formattedStars": "3k", + "license": "MIT License", + "lastRelease": "2025-09-06T12:58:22Z", + "formattedLastRelease": "3 days ago" + }, + "maticzav/graphql-middleware": { + "hasCommitsInLast3Months": false, + "stars": 1147, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2023-07-07T16:38:02Z", + "formattedLastRelease": "2 years ago" + }, + "maticzav/graphql-shield": { + "hasCommitsInLast3Months": false, + "stars": 3566, + "formattedStars": "4k", + "license": "MIT License", + "lastRelease": "2022-11-22T19:08:37Z", + "formattedLastRelease": "2 years ago" + }, + "ardatan/graphql-tools": { + "hasCommitsInLast3Months": false, + "stars": 5411, + "formattedStars": "5k", + "license": "MIT License", + "lastRelease": "2025-09-05T16:16:42Z", + "formattedLastRelease": "4 days ago" + }, + "anvilco/graphql-introspection-tools": { + "hasCommitsInLast3Months": false, + "stars": 34, + "formattedStars": "34", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "graphile/postgraphile": { + "hasCommitsInLast3Months": false, + "stars": 12798, + "formattedStars": "13k", + "license": "Other", + "lastRelease": "2023-10-05T16:27:00Z", + "formattedLastRelease": "1 year ago" + }, + "anvilco/spectaql": { + "hasCommitsInLast3Months": false, + "stars": 1174, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "neomatrixcode/Diana.jl": { + "hasCommitsInLast3Months": false, + "stars": 116, + "formattedStars": "116", + "license": "MIT License", + "lastRelease": "2022-08-16T03:22:22Z", + "formattedLastRelease": "3 years ago" + }, + "DeloitteDigitalAPAC/GraphQLClient.jl": { + "hasCommitsInLast3Months": false, + "stars": 47, + "formattedStars": "47", + "license": "Other", + "lastRelease": "2022-10-26T16:48:16Z", + "formattedLastRelease": "2 years ago" + }, + "graphql-perl/graphql-perl": { + "hasCommitsInLast3Months": false, + "stars": 72, + "formattedStars": "72", + "license": "Unknown", + "lastRelease": "", + "formattedLastRelease": "" + }, + "andreas/ocaml-graphql-server": { + "hasCommitsInLast3Months": false, + "stars": 622, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2022-07-08T16:26:45Z", + "formattedLastRelease": "3 years ago" + }, + "api-platform/api-platform": { + "hasCommitsInLast3Months": false, + "stars": 8983, + "formattedStars": "9k", + "license": "MIT License", + "lastRelease": "2025-03-11T16:15:41Z", + "formattedLastRelease": "6 months ago" + }, + "GatoGraphQL/GatoGraphQL": { + "hasCommitsInLast3Months": false, + "stars": 374, + "formattedStars": "374", + "license": "GNU General Public License v2.0", + "lastRelease": "2025-09-09T13:18:27Z", + "formattedLastRelease": "20 hours ago" + }, + "infinityloop-dev/graphpinator": { + "hasCommitsInLast3Months": false, + "stars": 44, + "formattedStars": "44", + "license": "MIT License", + "lastRelease": "2025-06-26T12:08:01Z", + "formattedLastRelease": "2 months ago" + }, + "jerowork/graphql-attribute-schema": { + "hasCommitsInLast3Months": false, + "stars": 16, + "formattedStars": "16", + "license": "MIT License", + "lastRelease": "2025-09-03T17:08:46Z", + "formattedLastRelease": "6 days ago" + }, + "webonyx/graphql-php": { + "hasCommitsInLast3Months": false, + "stars": 4680, + "formattedStars": "5k", + "license": "MIT License", + "lastRelease": "2025-08-20T10:10:24Z", + "formattedLastRelease": "2 weeks ago" + }, + "ivome/graphql-relay-php": { + "hasCommitsInLast3Months": false, + "stars": 271, + "formattedStars": "271", + "license": "BSD 3-Clause \"New\" or \"Revised\" License", + "lastRelease": "2021-04-24T19:40:30Z", + "formattedLastRelease": "4 years ago" + }, + "overblog/GraphQLBundle": { + "hasCommitsInLast3Months": false, + "stars": 794, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2024-12-19T15:48:59Z", + "formattedLastRelease": "8 months ago" + }, + "thecodingmachine/graphqlite": { + "hasCommitsInLast3Months": false, + "stars": 562, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2025-09-04T16:39:26Z", + "formattedLastRelease": "5 days ago" + }, + "nuwave/lighthouse": { + "hasCommitsInLast3Months": false, + "stars": 3444, + "formattedStars": "3k", + "license": "MIT License", + "lastRelease": "2025-08-22T08:13:24Z", + "formattedLastRelease": "2 weeks ago" + }, + "railt/railt": { + "hasCommitsInLast3Months": false, + "stars": 361, + "formattedStars": "361", + "license": "MIT License", + "lastRelease": "2019-03-01T15:20:44Z", + "formattedLastRelease": "6 years ago" + }, + "kepawni/serge": { + "hasCommitsInLast3Months": false, + "stars": 6, + "formattedStars": "6", + "license": "GNU General Public License v3.0", + "lastRelease": "", + "formattedLastRelease": "" + }, + "leocavalcante/siler": { + "hasCommitsInLast3Months": false, + "stars": 1114, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2021-01-27T19:41:57Z", + "formattedLastRelease": "4 years ago" + }, + "wp-graphql/wp-graphql": { + "hasCommitsInLast3Months": false, + "stars": 3738, + "formattedStars": "4k", + "license": "GNU General Public License v3.0", + "lastRelease": "2025-09-08T20:08:08Z", + "formattedLastRelease": "1 day ago" + }, + "mirumee/ariadne": { + "hasCommitsInLast3Months": false, + "stars": 2292, + "formattedStars": "2k", + "license": "BSD 3-Clause \"New\" or \"Revised\" License", + "lastRelease": "2025-04-18T08:27:47Z", + "formattedLastRelease": "4 months ago" + }, + "yefeza/django-graphbox": { + "hasCommitsInLast3Months": false, + "stars": 15, + "formattedStars": "15", + "license": "MIT License", + "lastRelease": "2024-03-23T21:41:41Z", + "formattedLastRelease": "1 year ago" + }, + "juanjcardona13/graphene_django_cruddals": { + "hasCommitsInLast3Months": false, + "stars": 16, + "formattedStars": "16", + "license": "Apache License 2.0", + "lastRelease": "", + "formattedLastRelease": "" + }, + "graphql-python/graphene": { + "hasCommitsInLast3Months": false, + "stars": 8208, + "formattedStars": "8k", + "license": "MIT License", + "lastRelease": "2024-11-09T20:43:58Z", + "formattedLastRelease": "10 months ago" + }, + "strawberry-graphql/strawberry": { + "hasCommitsInLast3Months": false, + "stars": 4402, + "formattedStars": "4k", + "license": "MIT License", + "lastRelease": "2025-09-07T20:28:35Z", + "formattedLastRelease": "2 days ago" + }, + "tartiflette/tartiflette": { + "hasCommitsInLast3Months": false, + "stars": 859, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2021-11-15T11:05:03Z", + "formattedLastRelease": "3 years ago" + }, + "mirumee/ariadne-codegen": { + "hasCommitsInLast3Months": false, + "stars": 343, + "formattedStars": "343", + "license": "BSD 3-Clause \"New\" or \"Revised\" License", + "lastRelease": "2025-08-28T07:34:01Z", + "formattedLastRelease": "1 week ago" + }, + "graphql-python/gql": { + "hasCommitsInLast3Months": false, + "stars": 1630, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "2025-09-05T14:22:54Z", + "formattedLastRelease": "4 days ago" + }, + "denisart/graphql-query": { + "hasCommitsInLast3Months": false, + "stars": 66, + "formattedStars": "66", + "license": "MIT License", + "lastRelease": "2024-07-31T10:54:53Z", + "formattedLastRelease": "1 year ago" + }, + "prisma-labs/python-graphql-client": { + "hasCommitsInLast3Months": false, + "stars": 156, + "formattedStars": "156", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "qlient-org/python-qlient": { + "hasCommitsInLast3Months": false, + "stars": 46, + "formattedStars": "46", + "license": "MIT License", + "lastRelease": "2022-07-29T16:10:08Z", + "formattedLastRelease": "3 years ago" + }, + "profusion/sgqlc": { + "hasCommitsInLast3Months": false, + "stars": 539, + "formattedStars": "1k", + "license": "ISC License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "apollographql/apollo-client": { + "hasCommitsInLast3Months": false, + "stars": 19626, + "formattedStars": "20k", + "license": "MIT License", + "lastRelease": "2025-09-02T16:52:29Z", + "formattedLastRelease": "1 week ago" + }, + "aws-amplify/amplify-js": { + "hasCommitsInLast3Months": false, + "stars": 9548, + "formattedStars": "10k", + "license": "Apache License 2.0", + "lastRelease": "2025-08-06T12:33:16Z", + "formattedLastRelease": "1 month ago" + }, + "Houfeng/gq-loader": { + "hasCommitsInLast3Months": false, + "stars": 59, + "formattedStars": "59", + "license": "Unknown", + "lastRelease": "", + "formattedLastRelease": "" + }, + "gqty-dev/gqty": { + "hasCommitsInLast3Months": false, + "stars": 1022, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2025-07-17T11:50:27Z", + "formattedLastRelease": "1 month ago" + }, + "grafoojs/grafoo": { + "hasCommitsInLast3Months": false, + "stars": 274, + "formattedStars": "274", + "license": "MIT License", + "lastRelease": "2018-06-20T15:21:00Z", + "formattedLastRelease": "7 years ago" + }, + "nearform/graphql-hooks": { + "hasCommitsInLast3Months": false, + "stars": 1889, + "formattedStars": "2k", + "license": "Other", + "lastRelease": "2025-01-08T18:45:52Z", + "formattedLastRelease": "8 months ago" + }, + "jasonkuhrt/graphql-request": { + "hasCommitsInLast3Months": false, + "stars": 6039, + "formattedStars": "6k", + "license": "MIT License", + "lastRelease": "2020-05-29T13:00:56Z", + "formattedLastRelease": "5 years ago" + }, + "babyfish-ct/graphql-ts-client": { + "hasCommitsInLast3Months": false, + "stars": 148, + "formattedStars": "148", + "license": "MIT License", + "lastRelease": "2023-12-14T03:06:21Z", + "formattedLastRelease": "1 year ago" + }, + "hasura/graphqurl": { + "hasCommitsInLast3Months": false, + "stars": 3369, + "formattedStars": "3k", + "license": "Apache License 2.0", + "lastRelease": "", + "formattedLastRelease": "" + }, + "kadirahq/lokka": { + "hasCommitsInLast3Months": false, + "stars": 1529, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "choojs/nanographql": { + "hasCommitsInLast3Months": false, + "stars": 420, + "formattedStars": "420", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "facebook/relay": { + "hasCommitsInLast3Months": false, + "stars": 18854, + "formattedStars": "19k", + "license": "MIT License", + "lastRelease": "2025-08-06T23:45:00Z", + "formattedLastRelease": "1 month ago" + }, + "FormidableLabs/urql": { + "hasCommitsInLast3Months": false, + "stars": 8848, + "formattedStars": "9k", + "license": "MIT License", + "lastRelease": "2025-08-29T08:06:41Z", + "formattedLastRelease": "1 week ago" + }, + "ropensci/ghql": { + "hasCommitsInLast3Months": false, + "stars": 148, + "formattedStars": "148", + "license": "Other", + "lastRelease": "2025-09-08T08:41:00Z", + "formattedLastRelease": "2 days ago" + }, + "ohler55/agoo": { + "hasCommitsInLast3Months": false, + "stars": 920, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "rmosolgo/graphql-ruby": { + "hasCommitsInLast3Months": false, + "stars": 5410, + "formattedStars": "5k", + "license": "MIT License", + "lastRelease": "2025-07-19T17:15:49Z", + "formattedLastRelease": "1 month ago" + }, + "virtualshield/rails-graphql": { + "hasCommitsInLast3Months": false, + "stars": 186, + "formattedStars": "186", + "license": "MIT License", + "lastRelease": "2025-08-25T17:53:38Z", + "formattedLastRelease": "2 weeks ago" + }, + "obmarg/cynic": { + "hasCommitsInLast3Months": false, + "stars": 431, + "formattedStars": "431", + "license": "Mozilla Public License 2.0", + "lastRelease": "2025-08-19T19:37:22Z", + "formattedLastRelease": "3 weeks ago" + }, + "arthurkhlghatyan/gql-client-rs": { + "hasCommitsInLast3Months": false, + "stars": 50, + "formattedStars": "50", + "license": "MIT License", + "lastRelease": "2025-06-07T14:31:10Z", + "formattedLastRelease": "3 months ago" + }, + "async-graphql/async-graphql": { + "hasCommitsInLast3Months": false, + "stars": 3566, + "formattedStars": "4k", + "license": "Apache License 2.0", + "lastRelease": "", + "formattedLastRelease": "" + }, + "graphql-rust/juniper": { + "hasCommitsInLast3Months": false, + "stars": 5878, + "formattedStars": "6k", + "license": "Other", + "lastRelease": "2025-09-08T23:23:40Z", + "formattedLastRelease": "1 day ago" + }, + "ghostdogpr/caliban": { + "hasCommitsInLast3Months": false, + "stars": 972, + "formattedStars": "1k", + "license": "Apache License 2.0", + "lastRelease": "2025-07-14T00:24:20Z", + "formattedLastRelease": "1 month ago" + }, + "sangria-graphql/sangria": { + "hasCommitsInLast3Months": false, + "stars": 1961, + "formattedStars": "2k", + "license": "Apache License 2.0", + "lastRelease": "2025-08-09T20:39:08Z", + "formattedLastRelease": "1 month ago" + }, + "apollographql/apollo-ios": { + "hasCommitsInLast3Months": false, + "stars": 3981, + "formattedStars": "4k", + "license": "MIT License", + "lastRelease": "2025-09-08T18:41:53Z", + "formattedLastRelease": "1 day ago" + }, + "nerdsupremacist/Graphaello": { + "hasCommitsInLast3Months": false, + "stars": 500, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2021-12-19T22:21:30Z", + "formattedLastRelease": "3 years ago" + }, + "funcompany/graphql-ios": { + "hasCommitsInLast3Months": false, + "stars": 61, + "formattedStars": "61", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "maticzav/swift-graphql": { + "hasCommitsInLast3Months": false, + "stars": 619, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2024-05-06T20:00:06Z", + "formattedLastRelease": "1 year ago" + }, + "GraphQLSwift/Graphiti": { + "hasCommitsInLast3Months": false, + "stars": 549, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2025-08-21T19:30:20Z", + "formattedLastRelease": "2 weeks ago" + }, + "nerdsupremacist/GraphZahl": { + "hasCommitsInLast3Months": false, + "stars": 146, + "formattedStars": "146", + "license": "MIT License", + "lastRelease": "2021-05-17T12:51:10Z", + "formattedLastRelease": "4 years ago" + }, + "apollographql/router": { + "hasCommitsInLast3Months": false, + "stars": 917, + "formattedStars": "1k", + "license": "Other", + "lastRelease": "2025-09-08T15:08:21Z", + "formattedLastRelease": "1 day ago" + }, + "eerimoq/gqt": { + "hasCommitsInLast3Months": false, + "stars": 470, + "formattedStars": "470", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "Escape-Technologies/graphql-armor": { + "hasCommitsInLast3Months": false, + "stars": 544, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2025-08-22T13:32:40Z", + "formattedLastRelease": "2 weeks ago" + }, + "ldebruijn/graphql-protect": { + "hasCommitsInLast3Months": false, + "stars": 33, + "formattedStars": "33", + "license": "MIT License", + "lastRelease": "2025-09-09T20:03:39Z", + "formattedLastRelease": "13 hours ago" + }, + "microcks/microcks": { + "hasCommitsInLast3Months": false, + "stars": 1701, + "formattedStars": "2k", + "license": "Apache License 2.0", + "lastRelease": "2025-07-21T12:44:11Z", + "formattedLastRelease": "1 month ago" + }, + "glideapps/quicktype": { + "hasCommitsInLast3Months": false, + "stars": 13296, + "formattedStars": "13k", + "license": "Apache License 2.0", + "lastRelease": "", + "formattedLastRelease": "" + }, + "schemathesis/schemathesis": { + "hasCommitsInLast3Months": false, + "stars": 2710, + "formattedStars": "3k", + "license": "MIT License", + "lastRelease": "2025-09-01T19:49:28Z", + "formattedLastRelease": "1 week ago" + } +} \ No newline at end of file From dd25718dee6fb7dbb4c903c9d0dde05f9b160f91 Mon Sep 17 00:00:00 2001 From: Piotr Monwid-Olechnowicz Date: Wed, 10 Sep 2025 14:41:42 +0200 Subject: [PATCH 2/4] Fail get-github-info.ts on errors (apart from deployments) --- scripts/sort-libraries/get-github-stats.ts | 2 +- src/get-github-info.ts | 86 ++++++++++++++++++---- 2 files changed, 74 insertions(+), 14 deletions(-) diff --git a/scripts/sort-libraries/get-github-stats.ts b/scripts/sort-libraries/get-github-stats.ts index ddd96c5e18..b5e5ee4af4 100644 --- a/scripts/sort-libraries/get-github-stats.ts +++ b/scripts/sort-libraries/get-github-stats.ts @@ -80,7 +80,7 @@ type GitHubStatsFetchResponse = } } -type GitHubInfo = { +export type GitHubInfo = { hasCommitsInLast3Months: boolean stars: number formattedStars: string diff --git a/src/get-github-info.ts b/src/get-github-info.ts index 5ce37a7843..d3cdb9a80a 100644 --- a/src/get-github-info.ts +++ b/src/get-github-info.ts @@ -1,26 +1,86 @@ import fg from "fast-glob" import fs from "fs/promises" import grayMatter from "gray-matter" -import { getGitHubStats } from "../scripts/sort-libraries/get-github-stats" +import { + getGitHubStats, + type GitHubInfo, +} from "../scripts/sort-libraries/get-github-stats" -// todo: aggregate errors, merge results instead of overwriting async function main() { const filePaths = await fg("./src/code/**/*.md") - const githubStats: Record = {} + const errors: Error[] = [] + + const newState = new Map() + const filePathToRepoName = new Map< + string /* file path */, + string /* repo name */ + >() for (const [index, filePath] of filePaths.entries()) { - const content = await fs.readFile(filePath, "utf8") - const { data } = grayMatter(content) - if (data.github) { - githubStats[data.github] = await getGitHubStats(data.github) + try { + const content = await fs.readFile(filePath, "utf8") + const { data } = grayMatter(content) + if (data.github) { + const stats = await getGitHubStats(data.github) + if (stats) { + newState.set(data.github, stats) + } + } + console.info("✅ Done for", filePath, index + 1, "of", filePaths.length) + } catch (err) { + const error = err instanceof Error ? err : new Error(String(err)) + errors.push(error) + console.error( + "❌ Error for", + filePath, + index + 1, + "of", + filePaths.length, + err, + ) + } + } + + if (errors.length > 0) { + if (process.env.VERCEL) { + console.error( + "We don't want to fail the deployment, so we'll use the old github-stats.json file.", + ) + return + } else { + throw new Error("Errors occurred while fetching GitHub stats.") + } + } + + // If a .mdx file was removed, we also remove the package from the JSON. + // If it errored for some reason, we don't do anything. + // If we got it, we overwrite. + { + const dataPath = "./src/github-stats.json" + const data = await fs.readFile(dataPath, "utf8") + const existingStats = JSON.parse(data) as Record + + const result: Record = {} + const brandNewKeys = new Set(newState.keys()) + + for (const [repoName, stats] of Object.entries(existingStats)) { + const mdxFileExists = filePathToRepoName.has(repoName) + if (mdxFileExists) { + brandNewKeys.delete(repoName) + result[repoName] = { + ...stats, + ...newState.get(repoName), + } + } } - console.info("✅ Done for", filePath, index + 1, "of", filePaths.length) + + for (const repoName of brandNewKeys) { + result[repoName] = newState.get(repoName)! + } + + await fs.writeFile(dataPath, JSON.stringify(result, null, 2)) } - await fs.writeFile( - "./src/github-stats.json", - JSON.stringify(githubStats, null, 2), - ) } -main() +main().catch(() => process.exit(1)) From 0814420fbf4c2e7c7e890a0e89a2f5ed320dbb57 Mon Sep 17 00:00:00 2001 From: Piotr Monwid-Olechnowicz Date: Wed, 10 Sep 2025 14:53:06 +0200 Subject: [PATCH 3/4] Fix malformed GitHub link, tweak the markup for the e2e test sake --- src/code/language-support/python/client/ql.md | 2 +- src/components/tools-and-libraries.tsx | 8 +- src/github-stats.json | 816 ++++++++++-------- 3 files changed, 449 insertions(+), 377 deletions(-) diff --git a/src/code/language-support/python/client/ql.md b/src/code/language-support/python/client/ql.md index 5343be63f9..0258220f66 100644 --- a/src/code/language-support/python/client/ql.md +++ b/src/code/language-support/python/client/ql.md @@ -2,7 +2,7 @@ name: ql description: Non intrusive python GraphQL client wrapped around pydantic. url: https://dsal3389.github.io/ql/ -github: https://github.com/dsal3389/ql +github: dsal3389/ql --- GraphQL client library, wrapped around pydantic classes for type validation, diff --git a/src/components/tools-and-libraries.tsx b/src/components/tools-and-libraries.tsx index 93a25a03e1..33425021c8 100644 --- a/src/components/tools-and-libraries.tsx +++ b/src/components/tools-and-libraries.tsx @@ -288,11 +288,11 @@ export function CodePage({ allTags, data }: CodePageProps) { "min-w-0", // hack to avoid overflow when opening details )} > -
-
+
+
{name} -
+
{tags.map(tag => ( {license}}
)} -
+ {compiledSource && (
diff --git a/src/github-stats.json b/src/github-stats.json index 9d76c6dea2..2cefcaaa8a 100644 --- a/src/github-stats.json +++ b/src/github-stats.json @@ -25,11 +25,11 @@ }, "ChilliCream/hotchocolate": { "hasCommitsInLast3Months": false, - "stars": 5592, + "stars": 5593, "formattedStars": "6k", "license": "MIT License", "lastRelease": "2025-09-09T09:29:52Z", - "formattedLastRelease": "23 hours ago" + "formattedLastRelease": "1 day ago" }, "dgraph-io/dgraph": { "hasCommitsInLast3Months": false, @@ -63,9 +63,17 @@ "lastRelease": "2025-08-19T12:12:37Z", "formattedLastRelease": "3 weeks ago" }, + "graphql-hive/platform": { + "hasCommitsInLast3Months": false, + "stars": 458, + "formattedStars": "458", + "license": "MIT License", + "lastRelease": "2025-08-28T18:03:32Z", + "formattedLastRelease": "1 week ago" + }, "Kong/insomnia": { "hasCommitsInLast3Months": false, - "stars": 37123, + "stars": 37124, "formattedStars": "37k", "license": "Apache License 2.0", "lastRelease": "2025-09-05T08:10:58Z", @@ -111,37 +119,21 @@ "lastRelease": "2025-09-05T07:39:55Z", "formattedLastRelease": "5 days ago" }, - "oliyh/re-graph": { + "ballerina-platform/module-ballerina-graphql": { "hasCommitsInLast3Months": false, - "stars": 466, - "formattedStars": "466", - "license": "Unknown", - "lastRelease": "2022-07-20T09:24:02Z", - "formattedLastRelease": "3 years ago" + "stars": 139, + "formattedStars": "139", + "license": "Apache License 2.0", + "lastRelease": "2025-04-11T01:29:10Z", + "formattedLastRelease": "5 months ago" }, - "alumbra/alumbra": { + "graphql/libgraphqlparser": { "hasCommitsInLast3Months": false, - "stars": 148, - "formattedStars": "148", + "stars": 1099, + "formattedStars": "1k", "license": "MIT License", - "lastRelease": "2017-06-12T12:14:25Z", - "formattedLastRelease": "8 years ago" - }, - "tendant/graphql-clj": { - "hasCommitsInLast3Months": false, - "stars": 285, - "formattedStars": "285", - "license": "Eclipse Public License 1.0", - "lastRelease": "", - "formattedLastRelease": "" - }, - "walmartlabs/lacinia": { - "hasCommitsInLast3Months": false, - "stars": 1839, - "formattedStars": "2k", - "license": "Other", - "lastRelease": "", - "formattedLastRelease": "" + "lastRelease": "2017-10-16T21:47:42Z", + "formattedLastRelease": "7 years ago" }, "graphql-dotnet/graphql-client": { "hasCommitsInLast3Months": false, @@ -215,13 +207,37 @@ "lastRelease": "", "formattedLastRelease": "" }, - "graphql/libgraphqlparser": { + "oliyh/re-graph": { "hasCommitsInLast3Months": false, - "stars": 1099, - "formattedStars": "1k", + "stars": 466, + "formattedStars": "466", + "license": "Unknown", + "lastRelease": "2022-07-20T09:24:02Z", + "formattedLastRelease": "3 years ago" + }, + "alumbra/alumbra": { + "hasCommitsInLast3Months": false, + "stars": 148, + "formattedStars": "148", "license": "MIT License", - "lastRelease": "2017-10-16T21:47:42Z", - "formattedLastRelease": "7 years ago" + "lastRelease": "2017-06-12T12:14:25Z", + "formattedLastRelease": "8 years ago" + }, + "tendant/graphql-clj": { + "hasCommitsInLast3Months": false, + "stars": 285, + "formattedStars": "285", + "license": "Eclipse Public License 1.0", + "lastRelease": "", + "formattedLastRelease": "" + }, + "walmartlabs/lacinia": { + "hasCommitsInLast3Months": false, + "stars": 1839, + "formattedStars": "2k", + "license": "Other", + "lastRelease": "", + "formattedLastRelease": "" }, "burner/graphqld": { "hasCommitsInLast3Months": false, @@ -247,6 +263,14 @@ "lastRelease": "", "formattedLastRelease": "" }, + "dillonkearns/elm-graphql": { + "hasCommitsInLast3Months": false, + "stars": 782, + "formattedStars": "1k", + "license": "BSD 3-Clause \"New\" or \"Revised\" License", + "lastRelease": "", + "formattedLastRelease": "" + }, "absinthe-graphql/absinthe": { "hasCommitsInLast3Months": false, "stars": 4353, @@ -263,14 +287,6 @@ "lastRelease": "2016-09-09T04:49:46Z", "formattedLastRelease": "9 years ago" }, - "ballerina-platform/module-ballerina-graphql": { - "hasCommitsInLast3Months": false, - "stars": 139, - "formattedStars": "139", - "license": "Apache License 2.0", - "lastRelease": "2025-04-11T01:29:10Z", - "formattedLastRelease": "5 months ago" - }, "jlouis/graphql-erlang": { "hasCommitsInLast3Months": false, "stars": 314, @@ -293,19 +309,43 @@ "formattedStars": "3k", "license": "MIT License", "lastRelease": "2025-09-07T10:05:12Z", - "formattedLastRelease": "2 days ago" + "formattedLastRelease": "3 days ago" }, - "dosco/graphjin": { + "Khan/genqlient": { "hasCommitsInLast3Months": false, - "stars": 2992, - "formattedStars": "3k", - "license": "Apache License 2.0", - "lastRelease": "2025-06-22T17:03:58Z", + "stars": 1242, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2025-05-18T19:09:08Z", + "formattedLastRelease": "3 months ago" + }, + "hasura/go-graphql-client": { + "hasCommitsInLast3Months": false, + "stars": 448, + "formattedStars": "448", + "license": "MIT License", + "lastRelease": "2025-06-20T03:17:26Z", "formattedLastRelease": "2 months ago" }, + "shurcooL/graphql": { + "hasCommitsInLast3Months": false, + "stars": 727, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "machinebox/graphql": { + "hasCommitsInLast3Months": false, + "stars": 960, + "formattedStars": "1k", + "license": "Apache License 2.0", + "lastRelease": "2018-05-31T14:28:32Z", + "formattedLastRelease": "7 years ago" + }, "99designs/gqlgen": { "hasCommitsInLast3Months": false, - "stars": 10469, + "stars": 10470, "formattedStars": "10k", "license": "MIT License", "lastRelease": "2025-07-27T23:09:18Z", @@ -333,7 +373,7 @@ "formattedStars": "5k", "license": "BSD 2-Clause \"Simplified\" License", "lastRelease": "2025-09-09T11:37:07Z", - "formattedLastRelease": "21 hours ago" + "formattedLastRelease": "1 day ago" }, "graphql-go/graphql": { "hasCommitsInLast3Months": false, @@ -365,39 +405,15 @@ "formattedStars": "1k", "license": "MIT License", "lastRelease": "2025-09-09T14:14:55Z", - "formattedLastRelease": "19 hours ago" - }, - "Khan/genqlient": { - "hasCommitsInLast3Months": false, - "stars": 1242, - "formattedStars": "1k", - "license": "MIT License", - "lastRelease": "2025-05-18T19:09:08Z", - "formattedLastRelease": "3 months ago" - }, - "hasura/go-graphql-client": { - "hasCommitsInLast3Months": false, - "stars": 448, - "formattedStars": "448", - "license": "MIT License", - "lastRelease": "2025-06-20T03:17:26Z", - "formattedLastRelease": "2 months ago" - }, - "shurcooL/graphql": { - "hasCommitsInLast3Months": false, - "stars": 727, - "formattedStars": "1k", - "license": "MIT License", - "lastRelease": "", - "formattedLastRelease": "" + "formattedLastRelease": "22 hours ago" }, - "machinebox/graphql": { + "dosco/graphjin": { "hasCommitsInLast3Months": false, - "stars": 960, - "formattedStars": "1k", + "stars": 2993, + "formattedStars": "3k", "license": "Apache License 2.0", - "lastRelease": "2018-05-31T14:28:32Z", - "formattedLastRelease": "7 years ago" + "lastRelease": "2025-06-22T17:03:58Z", + "formattedLastRelease": "2 months ago" }, "grails/gorm-graphql": { "hasCommitsInLast3Months": false, @@ -415,38 +431,6 @@ "lastRelease": "2024-11-05T10:13:23Z", "formattedLastRelease": "10 months ago" }, - "morpheusgraphql/morpheus-graphql": { - "hasCommitsInLast3Months": false, - "stars": 417, - "formattedStars": "417", - "license": "MIT License", - "lastRelease": "2024-06-10T08:34:35Z", - "formattedLastRelease": "1 year ago" - }, - "jasonsychau/graphql-w-persistent": { - "hasCommitsInLast3Months": false, - "stars": 10, - "formattedStars": "10", - "license": "Unknown", - "lastRelease": "", - "formattedLastRelease": "" - }, - "higherkindness/mu-haskell": { - "hasCommitsInLast3Months": false, - "stars": 334, - "formattedStars": "334", - "license": "Apache License 2.0", - "lastRelease": "2021-01-11T11:19:38Z", - "formattedLastRelease": "4 years ago" - }, - "dillonkearns/elm-graphql": { - "hasCommitsInLast3Months": false, - "stars": 782, - "formattedStars": "1k", - "license": "BSD 3-Clause \"New\" or \"Revised\" License", - "lastRelease": "", - "formattedLastRelease": "" - }, "apollographql/apollo-kotlin": { "hasCommitsInLast3Months": false, "stars": 3897, @@ -471,14 +455,6 @@ "lastRelease": "2019-07-13T22:47:01Z", "formattedLastRelease": "6 years ago" }, - "graphql-java-generator/graphql-gradle-plugin-project": { - "hasCommitsInLast3Months": false, - "stars": 56, - "formattedStars": "56", - "license": "MIT License", - "lastRelease": "", - "formattedLastRelease": "" - }, "graphql-calculator/graphql-calculator": { "hasCommitsInLast3Months": false, "stars": 113, @@ -508,8 +484,8 @@ "stars": 1473, "formattedStars": "1k", "license": "Apache License 2.0", - "lastRelease": "2025-09-05T14:14:35Z", - "formattedLastRelease": "4 days ago" + "lastRelease": "2025-09-10T11:59:29Z", + "formattedLastRelease": "45 minutes ago" }, "aPureBase/KGraphQL": { "hasCommitsInLast3Months": false, @@ -543,198 +519,62 @@ "lastRelease": "2025-08-19T12:50:32Z", "formattedLastRelease": "3 weeks ago" }, - "apollographql/apollo-server": { + "graphql-java-generator/graphql-gradle-plugin-project": { "hasCommitsInLast3Months": false, - "stars": 13915, - "formattedStars": "14k", + "stars": 56, + "formattedStars": "56", "license": "MIT License", - "lastRelease": "2025-07-17T16:58:26Z", - "formattedLastRelease": "1 month ago" + "lastRelease": "", + "formattedLastRelease": "" }, - "badbatch/graphql-box": { + "jasonsychau/graphql-w-persistent": { "hasCommitsInLast3Months": false, - "stars": 27, - "formattedStars": "27", - "license": "MIT License", + "stars": 10, + "formattedStars": "10", + "license": "Unknown", "lastRelease": "", "formattedLastRelease": "" }, - "graphql/graphql-http": { + "morpheusgraphql/morpheus-graphql": { "hasCommitsInLast3Months": false, - "stars": 350, - "formattedStars": "350", + "stars": 417, + "formattedStars": "417", "license": "MIT License", - "lastRelease": "2025-01-17T14:16:52Z", - "formattedLastRelease": "7 months ago" + "lastRelease": "2024-06-10T08:34:35Z", + "formattedLastRelease": "1 year ago" }, - "graphql/graphql-js": { + "higherkindness/mu-haskell": { "hasCommitsInLast3Months": false, - "stars": 20230, - "formattedStars": "20k", - "license": "MIT License", - "lastRelease": "2025-06-11T16:37:17Z", - "formattedLastRelease": "2 months ago" + "stars": 334, + "formattedStars": "334", + "license": "Apache License 2.0", + "lastRelease": "2021-01-11T11:19:38Z", + "formattedLastRelease": "4 years ago" }, - "enisdenjo/graphql-sse": { + "neomatrixcode/Diana.jl": { "hasCommitsInLast3Months": false, - "stars": 428, - "formattedStars": "428", + "stars": 116, + "formattedStars": "116", "license": "MIT License", - "lastRelease": "2025-01-10T11:57:20Z", - "formattedLastRelease": "7 months ago" + "lastRelease": "2022-08-16T03:22:22Z", + "formattedLastRelease": "3 years ago" }, - "enisdenjo/graphql-ws": { + "DeloitteDigitalAPAC/GraphQLClient.jl": { "hasCommitsInLast3Months": false, - "stars": 1832, - "formattedStars": "2k", - "license": "MIT License", - "lastRelease": "2025-07-14T12:15:37Z", - "formattedLastRelease": "1 month ago" - }, - "mercurius-js/mercurius": { - "hasCommitsInLast3Months": false, - "stars": 2439, - "formattedStars": "2k", - "license": "MIT License", - "lastRelease": "2025-06-19T08:04:40Z", - "formattedLastRelease": "2 months ago" - }, - "getcronit/pylon": { - "hasCommitsInLast3Months": false, - "stars": 331, - "formattedStars": "331", - "license": "Apache License 2.0", - "lastRelease": "2025-05-14T09:11:09Z", - "formattedLastRelease": "3 months ago" - }, - "networkimprov/brangr": { - "hasCommitsInLast3Months": false, - "stars": 4, - "formattedStars": "4", - "license": "Mozilla Public License 2.0", - "lastRelease": "2023-06-02T09:20:18Z", - "formattedLastRelease": "2 years ago" - }, - "hayes/giraphql": { - "hasCommitsInLast3Months": false, - "stars": 2521, - "formattedStars": "3k", - "license": "ISC License", - "lastRelease": "2025-09-07T21:17:51Z", - "formattedLastRelease": "2 days ago" - }, - "graphql/graphiql": { - "hasCommitsInLast3Months": false, - "stars": 16624, - "formattedStars": "17k", - "license": "MIT License", - "lastRelease": "2025-07-19T17:43:48Z", - "formattedLastRelease": "1 month ago" - }, - "Urigo/graphql-cli": { - "hasCommitsInLast3Months": false, - "stars": 2018, - "formattedStars": "2k", - "license": "MIT License", - "lastRelease": "2020-10-07T12:54:45Z", - "formattedLastRelease": "4 years ago" - }, - "dotansimha/graphql-code-generator": { - "hasCommitsInLast3Months": false, - "stars": 11139, - "formattedStars": "11k", - "license": "MIT License", - "lastRelease": "2025-09-07T17:01:52Z", - "formattedLastRelease": "2 days ago" - }, - "graphql/graphql-language-service": { - "hasCommitsInLast3Months": false, - "stars": 418, - "formattedStars": "418", - "license": "Unknown", - "lastRelease": "", - "formattedLastRelease": "" - }, - "n1ru4l/graphql-live-query": { - "hasCommitsInLast3Months": false, - "stars": 437, - "formattedStars": "437", - "license": "MIT License", - "lastRelease": "2022-07-29T09:27:53Z", - "formattedLastRelease": "3 years ago" - }, - "Urigo/graphql-mesh": { - "hasCommitsInLast3Months": false, - "stars": 3424, - "formattedStars": "3k", - "license": "MIT License", - "lastRelease": "2025-09-06T12:58:22Z", - "formattedLastRelease": "3 days ago" - }, - "maticzav/graphql-middleware": { - "hasCommitsInLast3Months": false, - "stars": 1147, - "formattedStars": "1k", - "license": "MIT License", - "lastRelease": "2023-07-07T16:38:02Z", - "formattedLastRelease": "2 years ago" - }, - "maticzav/graphql-shield": { - "hasCommitsInLast3Months": false, - "stars": 3566, - "formattedStars": "4k", - "license": "MIT License", - "lastRelease": "2022-11-22T19:08:37Z", - "formattedLastRelease": "2 years ago" - }, - "ardatan/graphql-tools": { - "hasCommitsInLast3Months": false, - "stars": 5411, - "formattedStars": "5k", - "license": "MIT License", - "lastRelease": "2025-09-05T16:16:42Z", - "formattedLastRelease": "4 days ago" - }, - "anvilco/graphql-introspection-tools": { - "hasCommitsInLast3Months": false, - "stars": 34, - "formattedStars": "34", - "license": "MIT License", - "lastRelease": "", - "formattedLastRelease": "" - }, - "graphile/postgraphile": { - "hasCommitsInLast3Months": false, - "stars": 12798, - "formattedStars": "13k", + "stars": 47, + "formattedStars": "47", "license": "Other", - "lastRelease": "2023-10-05T16:27:00Z", - "formattedLastRelease": "1 year ago" + "lastRelease": "2022-10-26T16:48:16Z", + "formattedLastRelease": "2 years ago" }, - "anvilco/spectaql": { + "andreas/ocaml-graphql-server": { "hasCommitsInLast3Months": false, - "stars": 1174, + "stars": 622, "formattedStars": "1k", "license": "MIT License", - "lastRelease": "", - "formattedLastRelease": "" - }, - "neomatrixcode/Diana.jl": { - "hasCommitsInLast3Months": false, - "stars": 116, - "formattedStars": "116", - "license": "MIT License", - "lastRelease": "2022-08-16T03:22:22Z", + "lastRelease": "2022-07-08T16:26:45Z", "formattedLastRelease": "3 years ago" }, - "DeloitteDigitalAPAC/GraphQLClient.jl": { - "hasCommitsInLast3Months": false, - "stars": 47, - "formattedStars": "47", - "license": "Other", - "lastRelease": "2022-10-26T16:48:16Z", - "formattedLastRelease": "2 years ago" - }, "graphql-perl/graphql-perl": { "hasCommitsInLast3Months": false, "stars": 72, @@ -743,14 +583,6 @@ "lastRelease": "", "formattedLastRelease": "" }, - "andreas/ocaml-graphql-server": { - "hasCommitsInLast3Months": false, - "stars": 622, - "formattedStars": "1k", - "license": "MIT License", - "lastRelease": "2022-07-08T16:26:45Z", - "formattedLastRelease": "3 years ago" - }, "api-platform/api-platform": { "hasCommitsInLast3Months": false, "stars": 8983, @@ -765,7 +597,7 @@ "formattedStars": "374", "license": "GNU General Public License v2.0", "lastRelease": "2025-09-09T13:18:27Z", - "formattedLastRelease": "20 hours ago" + "formattedLastRelease": "23 hours ago" }, "infinityloop-dev/graphpinator": { "hasCommitsInLast3Months": false, @@ -789,7 +621,7 @@ "formattedStars": "5k", "license": "MIT License", "lastRelease": "2025-08-20T10:10:24Z", - "formattedLastRelease": "2 weeks ago" + "formattedLastRelease": "3 weeks ago" }, "ivome/graphql-relay-php": { "hasCommitsInLast3Months": false, @@ -820,8 +652,8 @@ "stars": 3444, "formattedStars": "3k", "license": "MIT License", - "lastRelease": "2025-08-22T08:13:24Z", - "formattedLastRelease": "2 weeks ago" + "lastRelease": "2025-09-10T12:40:07Z", + "formattedLastRelease": "4 minutes ago" }, "railt/railt": { "hasCommitsInLast3Months": false, @@ -855,6 +687,54 @@ "lastRelease": "2025-09-08T20:08:08Z", "formattedLastRelease": "1 day ago" }, + "mirumee/ariadne-codegen": { + "hasCommitsInLast3Months": false, + "stars": 343, + "formattedStars": "343", + "license": "BSD 3-Clause \"New\" or \"Revised\" License", + "lastRelease": "2025-08-28T07:34:01Z", + "formattedLastRelease": "1 week ago" + }, + "graphql-python/gql": { + "hasCommitsInLast3Months": false, + "stars": 1631, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "2025-09-05T14:22:54Z", + "formattedLastRelease": "4 days ago" + }, + "denisart/graphql-query": { + "hasCommitsInLast3Months": false, + "stars": 66, + "formattedStars": "66", + "license": "MIT License", + "lastRelease": "2024-07-31T10:54:53Z", + "formattedLastRelease": "1 year ago" + }, + "prisma-labs/python-graphql-client": { + "hasCommitsInLast3Months": false, + "stars": 156, + "formattedStars": "156", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "qlient-org/python-qlient": { + "hasCommitsInLast3Months": false, + "stars": 46, + "formattedStars": "46", + "license": "MIT License", + "lastRelease": "2022-07-29T16:10:08Z", + "formattedLastRelease": "3 years ago" + }, + "profusion/sgqlc": { + "hasCommitsInLast3Months": false, + "stars": 539, + "formattedStars": "1k", + "license": "ISC License", + "lastRelease": "", + "formattedLastRelease": "" + }, "mirumee/ariadne": { "hasCommitsInLast3Months": false, "stars": 2292, @@ -903,53 +783,37 @@ "lastRelease": "2021-11-15T11:05:03Z", "formattedLastRelease": "3 years ago" }, - "mirumee/ariadne-codegen": { - "hasCommitsInLast3Months": false, - "stars": 343, - "formattedStars": "343", - "license": "BSD 3-Clause \"New\" or \"Revised\" License", - "lastRelease": "2025-08-28T07:34:01Z", - "formattedLastRelease": "1 week ago" - }, - "graphql-python/gql": { - "hasCommitsInLast3Months": false, - "stars": 1630, - "formattedStars": "2k", - "license": "MIT License", - "lastRelease": "2025-09-05T14:22:54Z", - "formattedLastRelease": "4 days ago" - }, - "denisart/graphql-query": { + "ropensci/ghql": { "hasCommitsInLast3Months": false, - "stars": 66, - "formattedStars": "66", - "license": "MIT License", - "lastRelease": "2024-07-31T10:54:53Z", - "formattedLastRelease": "1 year ago" + "stars": 148, + "formattedStars": "148", + "license": "Other", + "lastRelease": "2025-09-08T08:41:00Z", + "formattedLastRelease": "2 days ago" }, - "prisma-labs/python-graphql-client": { + "ohler55/agoo": { "hasCommitsInLast3Months": false, - "stars": 156, - "formattedStars": "156", + "stars": 920, + "formattedStars": "1k", "license": "MIT License", "lastRelease": "", "formattedLastRelease": "" }, - "qlient-org/python-qlient": { + "rmosolgo/graphql-ruby": { "hasCommitsInLast3Months": false, - "stars": 46, - "formattedStars": "46", + "stars": 5410, + "formattedStars": "5k", "license": "MIT License", - "lastRelease": "2022-07-29T16:10:08Z", - "formattedLastRelease": "3 years ago" + "lastRelease": "2025-07-19T17:15:49Z", + "formattedLastRelease": "1 month ago" }, - "profusion/sgqlc": { + "virtualshield/rails-graphql": { "hasCommitsInLast3Months": false, - "stars": 539, - "formattedStars": "1k", - "license": "ISC License", - "lastRelease": "", - "formattedLastRelease": "" + "stars": 186, + "formattedStars": "186", + "license": "MIT License", + "lastRelease": "2025-08-25T17:53:38Z", + "formattedLastRelease": "2 weeks ago" }, "apollographql/apollo-client": { "hasCommitsInLast3Months": false, @@ -991,6 +855,14 @@ "lastRelease": "2018-06-20T15:21:00Z", "formattedLastRelease": "7 years ago" }, + "badbatch/graphql-box": { + "hasCommitsInLast3Months": false, + "stars": 27, + "formattedStars": "27", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, "nearform/graphql-hooks": { "hasCommitsInLast3Months": false, "stars": 1889, @@ -999,6 +871,14 @@ "lastRelease": "2025-01-08T18:45:52Z", "formattedLastRelease": "8 months ago" }, + "graphql/graphql-http": { + "hasCommitsInLast3Months": false, + "stars": 350, + "formattedStars": "350", + "license": "MIT License", + "lastRelease": "2025-01-17T14:16:52Z", + "formattedLastRelease": "7 months ago" + }, "jasonkuhrt/graphql-request": { "hasCommitsInLast3Months": false, "stars": 6039, @@ -1007,6 +887,14 @@ "lastRelease": "2020-05-29T13:00:56Z", "formattedLastRelease": "5 years ago" }, + "enisdenjo/graphql-sse": { + "hasCommitsInLast3Months": false, + "stars": 428, + "formattedStars": "428", + "license": "MIT License", + "lastRelease": "2025-01-10T11:57:20Z", + "formattedLastRelease": "7 months ago" + }, "babyfish-ct/graphql-ts-client": { "hasCommitsInLast3Months": false, "stars": 148, @@ -1015,6 +903,14 @@ "lastRelease": "2023-12-14T03:06:21Z", "formattedLastRelease": "1 year ago" }, + "enisdenjo/graphql-ws": { + "hasCommitsInLast3Months": false, + "stars": 1832, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "2025-07-14T12:15:37Z", + "formattedLastRelease": "1 month ago" + }, "hasura/graphqurl": { "hasCommitsInLast3Months": false, "stars": 3369, @@ -1041,7 +937,7 @@ }, "facebook/relay": { "hasCommitsInLast3Months": false, - "stars": 18854, + "stars": 18853, "formattedStars": "19k", "license": "MIT License", "lastRelease": "2025-08-06T23:45:00Z", @@ -1055,37 +951,45 @@ "lastRelease": "2025-08-29T08:06:41Z", "formattedLastRelease": "1 week ago" }, - "ropensci/ghql": { + "apollographql/apollo-server": { "hasCommitsInLast3Months": false, - "stars": 148, - "formattedStars": "148", - "license": "Other", - "lastRelease": "2025-09-08T08:41:00Z", - "formattedLastRelease": "2 days ago" + "stars": 13915, + "formattedStars": "14k", + "license": "MIT License", + "lastRelease": "2025-07-17T16:58:26Z", + "formattedLastRelease": "1 month ago" }, - "ohler55/agoo": { + "graphql/graphql-js": { "hasCommitsInLast3Months": false, - "stars": 920, - "formattedStars": "1k", + "stars": 20230, + "formattedStars": "20k", "license": "MIT License", - "lastRelease": "", - "formattedLastRelease": "" + "lastRelease": "2025-06-11T16:37:17Z", + "formattedLastRelease": "2 months ago" }, - "rmosolgo/graphql-ruby": { + "dotansimha/graphql-yoga": { "hasCommitsInLast3Months": false, - "stars": 5410, - "formattedStars": "5k", + "stars": 8431, + "formattedStars": "8k", "license": "MIT License", - "lastRelease": "2025-07-19T17:15:49Z", - "formattedLastRelease": "1 month ago" + "lastRelease": "2025-09-06T20:14:20Z", + "formattedLastRelease": "3 days ago" }, - "virtualshield/rails-graphql": { + "mercurius-js/mercurius": { "hasCommitsInLast3Months": false, - "stars": 186, - "formattedStars": "186", + "stars": 2439, + "formattedStars": "2k", "license": "MIT License", - "lastRelease": "2025-08-25T17:53:38Z", - "formattedLastRelease": "2 weeks ago" + "lastRelease": "2025-06-19T08:04:40Z", + "formattedLastRelease": "2 months ago" + }, + "getcronit/pylon": { + "hasCommitsInLast3Months": false, + "stars": 331, + "formattedStars": "331", + "license": "Apache License 2.0", + "lastRelease": "2025-05-14T09:11:09Z", + "formattedLastRelease": "3 months ago" }, "obmarg/cynic": { "hasCommitsInLast3Months": false, @@ -1119,6 +1023,166 @@ "lastRelease": "2025-09-08T23:23:40Z", "formattedLastRelease": "1 day ago" }, + "networkimprov/brangr": { + "hasCommitsInLast3Months": false, + "stars": 4, + "formattedStars": "4", + "license": "Mozilla Public License 2.0", + "lastRelease": "2023-06-02T09:20:18Z", + "formattedLastRelease": "2 years ago" + }, + "hayes/giraphql": { + "hasCommitsInLast3Months": false, + "stars": 2521, + "formattedStars": "3k", + "license": "ISC License", + "lastRelease": "2025-09-07T21:17:51Z", + "formattedLastRelease": "2 days ago" + }, + "graphql/graphiql": { + "hasCommitsInLast3Months": false, + "stars": 16625, + "formattedStars": "17k", + "license": "MIT License", + "lastRelease": "2025-07-19T17:43:48Z", + "formattedLastRelease": "1 month ago" + }, + "Urigo/graphql-cli": { + "hasCommitsInLast3Months": false, + "stars": 2018, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "2020-10-07T12:54:45Z", + "formattedLastRelease": "4 years ago" + }, + "dotansimha/graphql-code-generator": { + "hasCommitsInLast3Months": false, + "stars": 11139, + "formattedStars": "11k", + "license": "MIT License", + "lastRelease": "2025-09-07T17:01:52Z", + "formattedLastRelease": "2 days ago" + }, + "kamilkisiela/graphql-config": { + "hasCommitsInLast3Months": false, + "stars": 1191, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2025-04-28T15:15:29Z", + "formattedLastRelease": "4 months ago" + }, + "dimaMachina/graphql-eslint/": { + "hasCommitsInLast3Months": false, + "stars": 830, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2025-03-26T14:11:23Z", + "formattedLastRelease": "5 months ago" + }, + "kamilkisiela/graphql-inspector": { + "hasCommitsInLast3Months": false, + "stars": 1718, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "2024-12-09T13:34:14Z", + "formattedLastRelease": "9 months ago" + }, + "graphql/graphql-language-service": { + "hasCommitsInLast3Months": false, + "stars": 418, + "formattedStars": "418", + "license": "Unknown", + "lastRelease": "", + "formattedLastRelease": "" + }, + "n1ru4l/graphql-live-query": { + "hasCommitsInLast3Months": false, + "stars": 437, + "formattedStars": "437", + "license": "MIT License", + "lastRelease": "2022-07-29T09:27:53Z", + "formattedLastRelease": "3 years ago" + }, + "Urigo/graphql-mesh": { + "hasCommitsInLast3Months": false, + "stars": 3425, + "formattedStars": "3k", + "license": "MIT License", + "lastRelease": "2025-09-06T12:58:22Z", + "formattedLastRelease": "3 days ago" + }, + "maticzav/graphql-middleware": { + "hasCommitsInLast3Months": false, + "stars": 1147, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2023-07-07T16:38:02Z", + "formattedLastRelease": "2 years ago" + }, + "Urigo/graphql-modules": { + "hasCommitsInLast3Months": false, + "stars": 1327, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2025-02-19T10:43:37Z", + "formattedLastRelease": "6 months ago" + }, + "Urigo/graphql-scalars": { + "hasCommitsInLast3Months": false, + "stars": 1913, + "formattedStars": "2k", + "license": "MIT License", + "lastRelease": "2025-03-19T11:10:44Z", + "formattedLastRelease": "5 months ago" + }, + "maticzav/graphql-shield": { + "hasCommitsInLast3Months": false, + "stars": 3566, + "formattedStars": "4k", + "license": "MIT License", + "lastRelease": "2022-11-22T19:08:37Z", + "formattedLastRelease": "2 years ago" + }, + "ardatan/graphql-tools": { + "hasCommitsInLast3Months": false, + "stars": 5412, + "formattedStars": "5k", + "license": "MIT License", + "lastRelease": "2025-09-05T16:16:42Z", + "formattedLastRelease": "4 days ago" + }, + "anvilco/graphql-introspection-tools": { + "hasCommitsInLast3Months": false, + "stars": 34, + "formattedStars": "34", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, + "graphile/postgraphile": { + "hasCommitsInLast3Months": false, + "stars": 12799, + "formattedStars": "13k", + "license": "Other", + "lastRelease": "2023-10-05T16:27:00Z", + "formattedLastRelease": "1 year ago" + }, + "Urigo/SOFA": { + "hasCommitsInLast3Months": false, + "stars": 1109, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "2024-12-16T10:06:41Z", + "formattedLastRelease": "8 months ago" + }, + "anvilco/spectaql": { + "hasCommitsInLast3Months": false, + "stars": 1174, + "formattedStars": "1k", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, "ghostdogpr/caliban": { "hasCommitsInLast3Months": false, "stars": 972, @@ -1191,14 +1255,6 @@ "lastRelease": "2025-09-08T15:08:21Z", "formattedLastRelease": "1 day ago" }, - "eerimoq/gqt": { - "hasCommitsInLast3Months": false, - "stars": 470, - "formattedStars": "470", - "license": "MIT License", - "lastRelease": "", - "formattedLastRelease": "" - }, "Escape-Technologies/graphql-armor": { "hasCommitsInLast3Months": false, "stars": 544, @@ -1207,13 +1263,29 @@ "lastRelease": "2025-08-22T13:32:40Z", "formattedLastRelease": "2 weeks ago" }, + "eerimoq/gqt": { + "hasCommitsInLast3Months": false, + "stars": 470, + "formattedStars": "470", + "license": "MIT License", + "lastRelease": "", + "formattedLastRelease": "" + }, "ldebruijn/graphql-protect": { "hasCommitsInLast3Months": false, "stars": 33, "formattedStars": "33", "license": "MIT License", "lastRelease": "2025-09-09T20:03:39Z", - "formattedLastRelease": "13 hours ago" + "formattedLastRelease": "16 hours ago" + }, + "graphql-hive/gateway": { + "hasCommitsInLast3Months": false, + "stars": 59, + "formattedStars": "59", + "license": "MIT License", + "lastRelease": "2025-09-09T09:52:51Z", + "formattedLastRelease": "1 day ago" }, "microcks/microcks": { "hasCommitsInLast3Months": false, @@ -1233,7 +1305,7 @@ }, "schemathesis/schemathesis": { "hasCommitsInLast3Months": false, - "stars": 2710, + "stars": 2711, "formattedStars": "3k", "license": "MIT License", "lastRelease": "2025-09-01T19:49:28Z", From 992e1162e1c8dba0ad81a2db2d860979f0007722 Mon Sep 17 00:00:00 2001 From: Piotr Monwid-Olechnowicz Date: Wed, 10 Sep 2025 14:58:45 +0200 Subject: [PATCH 4/4] Add a test for the code page --- test/e2e/code-page.spec.ts | 109 +++++++++++++ test/e2e/graphql-interactive.spec.ts | 221 +++++++++++++-------------- 2 files changed, 217 insertions(+), 113 deletions(-) create mode 100644 test/e2e/code-page.spec.ts diff --git a/test/e2e/code-page.spec.ts b/test/e2e/code-page.spec.ts new file mode 100644 index 0000000000..4622de46e4 --- /dev/null +++ b/test/e2e/code-page.spec.ts @@ -0,0 +1,109 @@ +import { test, expect } from "@playwright/test" + +test("icon buttons on the code page render visible non-zero SVGs for each link type", async ({ + page, +}) => { + await page.goto("/community/tools-and-libraries/") + + await page.waitForSelector("article header", { timeout: 10000 }) + + const headers = page.locator("article header") + const headerCount = await headers.count() + expect(headerCount).toBeGreaterThan(0) + + type IconType = "site" | "github" | "npm" | "gem" + const collected = new Map< + IconType, + { href: string; width: number; height: number } + >() + let firstHeaderWithAnyIconIndex: number | null = null + + const haveAll = () => + collected.has("site") && + collected.has("github") && + collected.has("npm") && + collected.has("gem") + + for (let i = 0; i < headerCount; i++) { + if (haveAll()) break + + const header = headers.nth(i) + + const githubLink = header.locator( + 'a[data-variant=tertiary][href*="github.com"]:has(svg)', + ) + const npmLink = header.locator( + 'a[data-variant=tertiary][href*="npmjs.com/package/"]:has(svg)', + ) + const gemLink = header.locator( + 'a[data-variant=tertiary][href*="rubygems.org/gems/"]:has(svg)', + ) + const siteLink = header.locator( + 'a[data-variant=tertiary][href^="http"]:not([href*="github.com"]):not([href*="npmjs.com/package/"]):not([href*="rubygems.org/gems/"]):has(svg)', + ) + + const process = async ( + loc: ReturnType, + type: IconType, + ) => { + if (collected.has(type)) return + if (await loc.count()) { + const btn = loc.first() + await btn.scrollIntoViewIfNeeded() + const svg = btn.locator("svg").first() + const box = await svg.boundingBox() + const href = await btn.getAttribute("href") + expect( + box, + `${type} icon SVG should have a bounding box`, + ).not.toBeNull() + expect( + box!.width, + `${type} icon SVG width should be > 0 (${href})`, + ).toBeGreaterThan(0) + expect( + box!.height, + `${type} icon SVG height should be > 0 (${href})`, + ).toBeGreaterThan(0) + collected.set(type, { + href: href || "", + width: box!.width, + height: box!.height, + }) + if (firstHeaderWithAnyIconIndex === null) { + firstHeaderWithAnyIconIndex = i + } + } + } + + await process(siteLink, "site") + await process(githubLink, "github") + await process(npmLink, "npm") + await process(gemLink, "gem") + } + + const missing: IconType[] = [] + for (const t of ["site", "github", "npm", "gem"] as IconType[]) { + if (!collected.has(t)) missing.push(t) + } + + expect( + missing, + missing.length + ? `Missing icon types: ${missing.join(", ")}.\nCollected: ${JSON.stringify( + Object.fromEntries(collected), + null, + 2, + )}` + : "All icon types collected.", + ).toHaveLength(0) + + expect(firstHeaderWithAnyIconIndex).not.toBeNull() + const headerForScreenshot = headers.nth(firstHeaderWithAnyIconIndex!) + const headerScreenshot = await headerForScreenshot.screenshot() + expect( + headerScreenshot.length, + // we had a bug where SVGs were rendered at 0x0 px. + "Screenshot should be visually visible", + ).toBeGreaterThan(100) +}) diff --git a/test/e2e/graphql-interactive.spec.ts b/test/e2e/graphql-interactive.spec.ts index 84946b81cd..da481d6201 100644 --- a/test/e2e/graphql-interactive.spec.ts +++ b/test/e2e/graphql-interactive.spec.ts @@ -1,65 +1,119 @@ import { test, expect, type Locator } from "@playwright/test" -test.describe("interactive examples", () => { - test("adds appearsIn field to hero query and gets correct response", async ({ - page, - }) => { - await page.goto("/learn") - await page.waitForSelector(".cm-editor", { timeout: 10000 }) - - const editors = page.locator(".cm-editor") - let heroEditor: Locator | null = null - - for (let i = 0; i < (await editors.count()); i++) { - const editor = editors.nth(i) - const content = await editor.textContent() - if (content && content.includes("hero")) { - heroEditor = editor - break - } +test("adds appearsIn field to hero query and gets correct response", async ({ + page, +}) => { + await page.goto("/learn") + await page.waitForSelector(".cm-editor", { timeout: 10000 }) + + const editors = page.locator(".cm-editor") + let heroEditor: Locator | null = null + + for (let i = 0; i < (await editors.count()); i++) { + const editor = editors.nth(i) + const content = await editor.textContent() + if (content && content.includes("hero")) { + heroEditor = editor + break } - - if (!heroEditor) { - throw new Error("Could not find hero GraphQL editor") + } + + if (!heroEditor) { + throw new Error("Could not find hero GraphQL editor") + } + + const codeLines = heroEditor.locator(".cm-line") + + // Find the line containing "name" and click after it + for (let i = 0; i < (await codeLines.count()); i++) { + const line = codeLines.nth(i) + const lineText = await line.textContent() + if (lineText && lineText.includes("name")) { + await line.click() + // Move to end of line + await page.keyboard.press("End") + // Add new line + await page.keyboard.press("Enter") + break } + } - const codeLines = heroEditor.locator(".cm-line") - - // Find the line containing "name" and click after it - for (let i = 0; i < (await codeLines.count()); i++) { - const line = codeLines.nth(i) - const lineText = await line.textContent() - if (lineText && lineText.includes("name")) { - await line.click() - // Move to end of line - await page.keyboard.press("End") - // Add new line - await page.keyboard.press("Enter") - break - } - } + await page.keyboard.type("ap") + await page.keyboard.press("Control+Space") - await page.keyboard.type("ap") - await page.keyboard.press("Control+Space") + const autoCompleteMenu = page.locator(".cm-tooltip-autocomplete") + await expect(autoCompleteMenu).toBeVisible({ timeout: 5000 }) - const autoCompleteMenu = page.locator(".cm-tooltip-autocomplete") - await expect(autoCompleteMenu).toBeVisible({ timeout: 5000 }) + const appearsInSuggestion = page + .locator(".cm-completionLabel") + .filter({ hasText: "appearsIn" }) - const appearsInSuggestion = page - .locator(".cm-completionLabel") - .filter({ hasText: "appearsIn" }) + expect(page.locator(".cm-completionDetail").first()).toHaveText("[Episode]!") - expect(page.locator(".cm-completionDetail").first()).toHaveText( - "[Episode]!", - ) + if (await appearsInSuggestion.isVisible()) { + await appearsInSuggestion.click() + } else { + await page.keyboard.press("Enter") + } - if (await appearsInSuggestion.isVisible()) { - await appearsInSuggestion.click() - } else { - await page.keyboard.press("Enter") + const resultViewer = page.locator(".result-window").first() + await expect(resultViewer).toBeVisible() + + await expect + .poll(async () => { + const resultContent = await resultViewer.textContent() + const jsonMatch = resultContent?.match(/\{[\s\S]*\}/) + if (jsonMatch) { + const responseJson = JSON.parse(jsonMatch[0]) + return responseJson + } + + return {} + }) + .toStrictEqual({ + data: { + hero: { + name: "R2-D2", + appearsIn: ["NEWHOPE", "EMPIRE", "JEDI"], + }, + }, + }) +}) + +test("edits variables and receives an expected mutation result", async ({ + page, +}) => { + await page.goto("/learn/mutations") + await page.waitForLoadState("networkidle") + + // Find the mutation example that has GraphiQL enabled + const editors = page.locator(".cm-editor") + let mutationEditor: Locator | null = null + + for (let i = 0; i < (await editors.count()); i++) { + const editor = editors.nth(i) + const content = await editor.textContent() + if (content && content.includes("CreateReviewForEpisode")) { + mutationEditor = editor + break } + } - const resultViewer = page.locator(".result-window").first() + if (!mutationEditor) { + throw new Error("Could not find mutation GraphQL editor") + } + + const variableEditor = mutationEditor.locator(".variable-editor").first() + + if (await variableEditor.isVisible()) { + await variableEditor.click() + + await page.getByText('"This is a great movie!"').first().click() + await page.keyboard.press("ControlOrMeta+ArrowRight") + for (let i = 0; i < 4; i++) await page.keyboard.press("Alt+Shift+ArrowLeft") + await page.keyboard.type('almost as good as Andor"') + + const resultViewer = mutationEditor.locator(".result-window") await expect(resultViewer).toBeVisible() await expect @@ -70,74 +124,15 @@ test.describe("interactive examples", () => { const responseJson = JSON.parse(jsonMatch[0]) return responseJson } - return {} }) .toStrictEqual({ data: { - hero: { - name: "R2-D2", - appearsIn: ["NEWHOPE", "EMPIRE", "JEDI"], + createReview: { + stars: 5, + commentary: "This is almost as good as Andor", }, }, }) - }) - - test("edits variables and receives an expected mutation result", async ({ - page, - }) => { - await page.goto("/learn/mutations") - await page.waitForLoadState("networkidle") - - // Find the mutation example that has GraphiQL enabled - const editors = page.locator(".cm-editor") - let mutationEditor: Locator | null = null - - for (let i = 0; i < (await editors.count()); i++) { - const editor = editors.nth(i) - const content = await editor.textContent() - if (content && content.includes("CreateReviewForEpisode")) { - mutationEditor = editor - break - } - } - - if (!mutationEditor) { - throw new Error("Could not find mutation GraphQL editor") - } - - const variableEditor = mutationEditor.locator(".variable-editor").first() - - if (await variableEditor.isVisible()) { - await variableEditor.click() - - await page.getByText('"This is a great movie!"').first().click() - await page.keyboard.press("ControlOrMeta+ArrowRight") - for (let i = 0; i < 4; i++) - await page.keyboard.press("Alt+Shift+ArrowLeft") - await page.keyboard.type('almost as good as Andor"') - - const resultViewer = mutationEditor.locator(".result-window") - await expect(resultViewer).toBeVisible() - - await expect - .poll(async () => { - const resultContent = await resultViewer.textContent() - const jsonMatch = resultContent?.match(/\{[\s\S]*\}/) - if (jsonMatch) { - const responseJson = JSON.parse(jsonMatch[0]) - return responseJson - } - return {} - }) - .toStrictEqual({ - data: { - createReview: { - stars: 5, - commentary: "This is almost as good as Andor", - }, - }, - }) - } - }) + } })