diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index 206e3a04d8..d973a97a12 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -1,6 +1,8 @@
name: lint & test
-on: pull_request
+on:
+ - pull_request
+ - workflow_call
jobs:
check:
@@ -61,7 +63,10 @@ jobs:
# since the amount of time it takes to restore the cache is
# comparable to the time it takes to download the binaries"
- name: Install Playwright Browsers
- run: ./node_modules/.bin/playwright install --with-deps
+ run: ./node_modules/.bin/playwright install --with-deps --no-shell
+
+ - name: Build the website
+ run: pnpm build
- name: Run end-to-end tests
run: ./node_modules/.bin/playwright test
@@ -72,3 +77,6 @@ jobs:
name: playwright-report
path: playwright-report/
retention-days: 30
+
+ - uses: valeriangalliat/action-sshd-cloudflared@v1
+ if: failure()
diff --git a/.github/workflows/conference-sync.yml b/.github/workflows/conference-sync.yml
deleted file mode 100644
index 776dc7aa58..0000000000
--- a/.github/workflows/conference-sync.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-# Sched's API rate limits are very limited, so we sync non-critical part of the data on a cron.
-on:
- workflow_dispatch:
- # schedule:
- # - cron: "*/10 * * * *" # every ten minutes
-
-jobs:
- sync:
- runs-on: ubuntu-latest
- permissions:
- contents: write
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Sync conference data from Sched
- run: |
- tsx scripts/sync-sched/sync.ts --year 2025
- env:
- SCHED_ACCESS_TOKEN_2025: ${{ secrets.SCHED_ACCESS_TOKEN_2025 }}
-
- - name: Commit changes
- uses: stefanzweifel/git-auto-commit-action@v5
- with:
- file_pattern: "scripts/sync-sched/*.json"
- commit_message: "Sync conference data from Sched"
diff --git a/.github/workflows/schedule.yml b/.github/workflows/schedule.yml
new file mode 100644
index 0000000000..ae9c7176c7
--- /dev/null
+++ b/.github/workflows/schedule.yml
@@ -0,0 +1,43 @@
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: "0 0,12 * * *" # on midnight and noon
+
+jobs:
+ check:
+ if: github.ref == 'refs/heads/source'
+ uses: ./.github/workflows/check.yml
+
+ sync:
+ runs-on: ubuntu-latest
+ needs: check
+ if: github.ref == 'refs/heads/source'
+ permissions:
+ contents: write
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - uses: the-guild-org/shared-config/setup@main
+ name: setup env
+ with:
+ packageManager: pnpm
+ workingDirectory: ./
+
+ - name: Prebuild
+ run: pnpm prebuild
+ env:
+ GOOGLE_CALENDAR_API_KEY: ${{ secrets.GOOGLE_CALENDAR_API_KEY }}
+
+ - name: Sync conference data
+ if: false # disabled until next conference
+ run: |
+ tsx scripts/sync-sched/sync.ts --year 2025
+ env:
+ SCHED_ACCESS_TOKEN_2025: ${{ secrets.SCHED_ACCESS_TOKEN_2025 }}
+
+ - name: Commit changes
+ uses: stefanzweifel/git-auto-commit-action@v5
+ with:
+ file_pattern: "scripts/**/*"
+ commit_message: "Run sync scripts"
diff --git a/package.json b/package.json
index ed68a516f0..2f90c0ff3e 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
"type": "module",
"repository": "graphql/graphql.github.io website",
"private": true,
- "packageManager": "pnpm@10.20.0+sha512.cf9998222162dd85864d0a8102e7892e7ba4ceadebbf5a31f9c2fce48dfce317a9c53b9f6464d1ef9042cba2e02ae02a9f7c143a2b438cd93c91840f0192b9dd",
+ "packageManager": "pnpm@10.22.0+sha512.bf049efe995b28f527fd2b41ae0474ce29186f7edcb3bf545087bd61fbbebb2bf75362d1307fda09c2d288e1e499787ac12d4fcb617a974718a6051f2eee741c",
"scripts": {
"analyze": "ANALYZE=true next build",
"build": "next build",
@@ -15,7 +15,7 @@
"lint:docs": "eslint --ignore-path .gitignore src/pages/learn --format stylish",
"lint:docs:ci": "eslint --ignore-path .gitignore src/pages/learn --format eslint-formatter-github",
"postbuild": "next-sitemap",
- "prebuild": "tsx scripts/get-github-info && tsx scripts/sync-landing-schema/src/index.ts",
+ "prebuild": "tsx scripts/get-github-info && node scripts/sync-landing-schema && node scripts/sync-working-groups",
"start": "next start",
"test": "playwright test && pnpm test:unit",
"test:e2e": "playwright test",
@@ -69,7 +69,7 @@
"p-limit": "^4.0.0",
"parser-front-matter": "1.6.4",
"plaiceholder": "^3.0.0",
- "playwright-core": "^1.54.2",
+ "playwright-core": "^1.56.1",
"postcss": "^8.4.49",
"postcss-import": "^16.1.1",
"react": "^18.3.1",
@@ -89,13 +89,13 @@
"use-query-params": "^2.2.1"
},
"optionalDependencies": {
- "playwright": "^1.54.2"
+ "playwright": "^1.56.1"
},
"devDependencies": {
"@graphql-eslint/eslint-plugin": "4.4.0",
"@graphql-eslint/parser": "^0.1.0",
"@next/eslint-plugin-next": "^15.3.3",
- "@playwright/test": "^1.54.2",
+ "@playwright/test": "^1.56.1",
"@svgr/webpack": "^8.1.0",
"@testing-library/react": "^16.3.0",
"@types/codemirror": "5.60.17",
@@ -151,7 +151,9 @@
"@codemirror/language": "6.10.0",
"@codemirror/lint": "6.8.5",
"@codemirror/state": "6.4.0",
- "@codemirror/view": "6.24.0"
+ "@codemirror/view": "6.24.0",
+ "@playwright/test": "1.56.1",
+ "playwright-core": "1.56.1"
}
}
}
diff --git a/playwright.config.ts b/playwright.config.ts
index 1d32e2a082..7424479740 100644
--- a/playwright.config.ts
+++ b/playwright.config.ts
@@ -27,13 +27,7 @@ export default defineConfig({
channel: "chromium",
...(process.env.CI
? {
- args: [
- "--enable-gpu",
- "--use-gl=angle",
- "--use-angle=gl-egl",
- "--ignore-gpu-blocklist",
- "--enable-unsafe-swiftshader",
- ],
+ args: ["--enable-gpu"],
}
: {}),
},
@@ -41,7 +35,7 @@ export default defineConfig({
],
webServer: {
- command: "pnpm dev",
+ command: process.env.CI ? "pnpm start" : "pnpm dev",
url: "http://localhost:3000",
reuseExistingServer: !process.env.CI,
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f0f6fca1bc..4bf53fbc6f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,6 +13,8 @@ overrides:
'@codemirror/lint': 6.8.5
'@codemirror/state': 6.4.0
'@codemirror/view': 6.24.0
+ '@playwright/test': 1.56.1
+ playwright-core: 1.56.1
patchedDependencies:
mermaid-isomorphic:
@@ -70,7 +72,7 @@ importers:
version: 15.5.6
'@plaiceholder/next':
specifier: ^3.0.0
- version: 3.0.0(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(plaiceholder@3.0.0(sharp@0.34.4))(sharp@0.34.4)
+ version: 3.0.0(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(plaiceholder@3.0.0(sharp@0.34.4))(sharp@0.34.4)
'@sparticuz/chromium':
specifier: ^138.0.2
version: 138.0.2
@@ -133,22 +135,22 @@ importers:
version: 12.23.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next:
specifier: ^14.2.32
- version: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-query-params:
specifier: ^5.0.1
- version: 5.1.0(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(use-query-params@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ version: 5.1.0(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(use-query-params@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
next-sitemap:
specifier: ^4.2.3
- version: 4.2.3(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ version: 4.2.3(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
next-with-less:
specifier: ^3.0.1
- version: 3.0.1(less-loader@12.3.0(less@4.4.1))(less@4.4.1)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ version: 3.0.1(less-loader@12.3.0(less@4.4.1))(less@4.4.1)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
nextra:
specifier: 3.3.1
- version: 3.3.1(patch_hash=a4cb9ca39251906b7635817067482091dda31729230807c156358a0561ce2bcb)(@types/react@18.3.26)(acorn@8.15.0)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)
+ version: 3.3.1(patch_hash=a4cb9ca39251906b7635817067482091dda31729230807c156358a0561ce2bcb)(@types/react@18.3.26)(acorn@8.15.0)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)
nextra-theme-docs:
specifier: 3.3.1
- version: 3.3.1(patch_hash=2cafbb261163557a490b97bea35ce78a55af9ec0ae200e2545ad15543b1443e5)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.3.1(patch_hash=a4cb9ca39251906b7635817067482091dda31729230807c156358a0561ce2bcb)(@types/react@18.3.26)(acorn@8.15.0)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 3.3.1(patch_hash=2cafbb261163557a490b97bea35ce78a55af9ec0ae200e2545ad15543b1443e5)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.3.1(patch_hash=a4cb9ca39251906b7635817067482091dda31729230807c156358a0561ce2bcb)(@types/react@18.3.26)(acorn@8.15.0)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
numbro:
specifier: 2.5.0
version: 2.5.0
@@ -162,8 +164,8 @@ importers:
specifier: ^3.0.0
version: 3.0.0(sharp@0.34.4)
playwright-core:
- specifier: ^1.54.2
- version: 1.55.0
+ specifier: 1.56.1
+ version: 1.56.1
postcss:
specifier: ^8.4.49
version: 8.5.6
@@ -184,7 +186,7 @@ importers:
version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rehype-mermaid:
specifier: ^3.0.0
- version: 3.0.0(playwright@1.55.0)
+ version: 3.0.0(playwright@1.56.1)
rss:
specifier: 1.2.2
version: 1.2.2
@@ -226,8 +228,8 @@ importers:
specifier: ^15.3.3
version: 15.5.6
'@playwright/test':
- specifier: ^1.54.2
- version: 1.55.0
+ specifier: 1.56.1
+ version: 1.56.1
'@svgr/webpack':
specifier: ^8.1.0
version: 8.1.0(typescript@5.9.3)
@@ -308,8 +310,8 @@ importers:
version: 5.9.3
optionalDependencies:
playwright:
- specifier: ^1.54.2
- version: 1.55.0
+ specifier: ^1.56.1
+ version: 1.56.1
scripts/sync-landing-schema:
dependencies:
@@ -2079,8 +2081,8 @@ packages:
plaiceholder: '>=3.0.0'
sharp: '>= 0.30.6'
- '@playwright/test@1.55.0':
- resolution: {integrity: sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==}
+ '@playwright/test@1.56.1':
+ resolution: {integrity: sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==}
engines: {node: '>=18'}
hasBin: true
@@ -4925,7 +4927,7 @@ packages:
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
- '@playwright/test': ^1.41.2
+ '@playwright/test': 1.56.1
react: ^18.2.0
react-dom: ^18.2.0
sass: ^1.3.0
@@ -5236,13 +5238,13 @@ packages:
peerDependencies:
sharp: '>= 0.30.6'
- playwright-core@1.55.0:
- resolution: {integrity: sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==}
+ playwright-core@1.56.1:
+ resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==}
engines: {node: '>=18'}
hasBin: true
- playwright@1.55.0:
- resolution: {integrity: sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==}
+ playwright@1.56.1:
+ resolution: {integrity: sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==}
engines: {node: '>=18'}
hasBin: true
@@ -8668,15 +8670,15 @@ snapshots:
'@pkgr/core@0.2.9': {}
- '@plaiceholder/next@3.0.0(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(plaiceholder@3.0.0(sharp@0.34.4))(sharp@0.34.4)':
+ '@plaiceholder/next@3.0.0(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(plaiceholder@3.0.0(sharp@0.34.4))(sharp@0.34.4)':
dependencies:
- next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
plaiceholder: 3.0.0(sharp@0.34.4)
sharp: 0.34.4
- '@playwright/test@1.55.0':
+ '@playwright/test@1.56.1':
dependencies:
- playwright: 1.55.0
+ playwright: 1.56.1
'@polka/url@1.0.0-next.29': {}
@@ -11784,12 +11786,12 @@ snapshots:
merge2@1.4.1: {}
- mermaid-isomorphic@3.0.4(patch_hash=fccadc7038719bcf9dc12a573655719edaf7ea8246bd144c660191d05b38c637)(playwright@1.55.0):
+ mermaid-isomorphic@3.0.4(patch_hash=fccadc7038719bcf9dc12a573655719edaf7ea8246bd144c660191d05b38c637)(playwright@1.56.1):
dependencies:
'@fortawesome/fontawesome-free': 6.7.2
mermaid: 11.10.0
optionalDependencies:
- playwright: 1.55.0
+ playwright: 1.56.1
transitivePeerDependencies:
- supports-color
@@ -12191,34 +12193,34 @@ snapshots:
negotiator@1.0.0: {}
- next-query-params@5.1.0(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(use-query-params@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
+ next-query-params@5.1.0(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(use-query-params@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
dependencies:
- next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
tslib: 2.8.1
use-query-params: 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- next-sitemap@4.2.3(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
+ next-sitemap@4.2.3(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
dependencies:
'@corex/deepmerge': 4.0.43
'@next/env': 13.5.11
fast-glob: 3.3.3
minimist: 1.2.8
- next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- next-with-less@3.0.1(less-loader@12.3.0(less@4.4.1))(less@4.4.1)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
+ next-with-less@3.0.1(less-loader@12.3.0(less@4.4.1))(less@4.4.1)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
dependencies:
clone-deep: 4.0.1
less: 4.4.1
less-loader: 12.3.0(less@4.4.1)
- next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@next/env': 14.2.33
'@swc/helpers': 0.5.5
@@ -12239,26 +12241,26 @@ snapshots:
'@next/swc-win32-arm64-msvc': 14.2.33
'@next/swc-win32-ia32-msvc': 14.2.33
'@next/swc-win32-x64-msvc': 14.2.33
- '@playwright/test': 1.55.0
+ '@playwright/test': 1.56.1
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
- nextra-theme-docs@3.3.1(patch_hash=2cafbb261163557a490b97bea35ce78a55af9ec0ae200e2545ad15543b1443e5)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.3.1(patch_hash=a4cb9ca39251906b7635817067482091dda31729230807c156358a0561ce2bcb)(@types/react@18.3.26)(acorn@8.15.0)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ nextra-theme-docs@3.3.1(patch_hash=2cafbb261163557a490b97bea35ce78a55af9ec0ae200e2545ad15543b1443e5)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.3.1(patch_hash=a4cb9ca39251906b7635817067482091dda31729230807c156358a0561ce2bcb)(@types/react@18.3.26)(acorn@8.15.0)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@headlessui/react': 2.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
clsx: 2.1.1
escape-string-regexp: 5.0.0
flexsearch: 0.7.43
- next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-themes: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- nextra: 3.3.1(patch_hash=a4cb9ca39251906b7635817067482091dda31729230807c156358a0561ce2bcb)(@types/react@18.3.26)(acorn@8.15.0)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)
+ nextra: 3.3.1(patch_hash=a4cb9ca39251906b7635817067482091dda31729230807c156358a0561ce2bcb)(@types/react@18.3.26)(acorn@8.15.0)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
scroll-into-view-if-needed: 3.1.0
zod: 3.25.76
- nextra@3.3.1(patch_hash=a4cb9ca39251906b7635817067482091dda31729230807c156358a0561ce2bcb)(@types/react@18.3.26)(acorn@8.15.0)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3):
+ nextra@3.3.1(patch_hash=a4cb9ca39251906b7635817067482091dda31729230807c156358a0561ce2bcb)(@types/react@18.3.26)(acorn@8.15.0)(next@14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3):
dependencies:
'@formatjs/intl-localematcher': 0.5.10
'@headlessui/react': 2.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -12281,7 +12283,7 @@ snapshots:
mdast-util-gfm: 3.1.0
mdast-util-to-hast: 13.2.0
negotiator: 1.0.0
- next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.33(@babel/core@7.28.3)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
p-limit: 6.2.0
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -12613,11 +12615,11 @@ snapshots:
dependencies:
sharp: 0.34.4
- playwright-core@1.55.0: {}
+ playwright-core@1.56.1: {}
- playwright@1.55.0:
+ playwright@1.56.1:
dependencies:
- playwright-core: 1.55.0
+ playwright-core: 1.56.1
optionalDependencies:
fsevents: 2.3.2
@@ -12903,19 +12905,19 @@ snapshots:
unist-util-visit-parents: 6.0.1
vfile: 6.0.3
- rehype-mermaid@3.0.0(playwright@1.55.0):
+ rehype-mermaid@3.0.0(playwright@1.56.1):
dependencies:
'@types/hast': 3.0.4
hast-util-from-html-isomorphic: 2.0.0
hast-util-to-text: 4.0.2
- mermaid-isomorphic: 3.0.4(patch_hash=fccadc7038719bcf9dc12a573655719edaf7ea8246bd144c660191d05b38c637)(playwright@1.55.0)
+ mermaid-isomorphic: 3.0.4(patch_hash=fccadc7038719bcf9dc12a573655719edaf7ea8246bd144c660191d05b38c637)(playwright@1.56.1)
mini-svg-data-uri: 1.4.4
space-separated-tokens: 2.0.2
unified: 11.0.5
unist-util-visit-parents: 6.0.1
vfile: 6.0.3
optionalDependencies:
- playwright: 1.55.0
+ playwright: 1.56.1
transitivePeerDependencies:
- supports-color
diff --git a/scripts/get-github-info/github-stats.json b/scripts/get-github-info/github-stats.json
index c2bcf3c790..650bedfda5 100644
--- a/scripts/get-github-info/github-stats.json
+++ b/scripts/get-github-info/github-stats.json
@@ -1,19 +1,19 @@
{
"altair-graphql/altair": {
"hasCommitsInLast3Months": false,
- "stars": 5355,
+ "stars": 5361,
"formattedStars": "5k",
"license": "MIT License",
"lastRelease": "2025-10-28T22:43:22Z",
- "formattedLastRelease": "1 week ago"
+ "formattedLastRelease": "2 weeks ago"
},
"apache/apisix": {
"hasCommitsInLast3Months": false,
- "stars": 15805,
+ "stars": 15866,
"formattedStars": "16k",
"license": "Apache License 2.0",
"lastRelease": "2025-10-16T07:54:57Z",
- "formattedLastRelease": "3 weeks ago"
+ "formattedLastRelease": "1 month ago"
},
"apollographql/apollo-studio-community": {
"hasCommitsInLast3Months": false,
@@ -25,19 +25,19 @@
},
"ChilliCream/hotchocolate": {
"hasCommitsInLast3Months": false,
- "stars": 5614,
+ "stars": 5621,
"formattedStars": "6k",
"license": "MIT License",
- "lastRelease": "2025-10-31T07:44:48Z",
- "formattedLastRelease": "6 days ago"
+ "lastRelease": "2025-11-18T21:41:46Z",
+ "formattedLastRelease": "5 minutes ago"
},
"dgraph-io/dgraph": {
"hasCommitsInLast3Months": false,
- "stars": 21328,
+ "stars": 21350,
"formattedStars": "21k",
"license": "Apache License 2.0",
"lastRelease": "2025-10-07T20:50:36Z",
- "formattedLastRelease": "4 weeks ago"
+ "formattedLastRelease": "1 month ago"
},
"yahoo/elide": {
"hasCommitsInLast3Months": false,
@@ -57,31 +57,31 @@
},
"hasura/graphql-engine": {
"hasCommitsInLast3Months": false,
- "stars": 31797,
+ "stars": 31815,
"formattedStars": "32k",
"license": "Apache License 2.0",
"lastRelease": "2025-10-14T15:20:38Z",
- "formattedLastRelease": "3 weeks ago"
+ "formattedLastRelease": "1 month ago"
},
"graphql-hive/platform": {
"hasCommitsInLast3Months": false,
- "stars": 466,
- "formattedStars": "466",
+ "stars": 469,
+ "formattedStars": "469",
"license": "MIT License",
- "lastRelease": "2025-10-30T07:47:41Z",
- "formattedLastRelease": "1 week ago"
+ "lastRelease": "2025-11-18T10:07:16Z",
+ "formattedLastRelease": "11 hours ago"
},
"Kong/insomnia": {
"hasCommitsInLast3Months": false,
- "stars": 37475,
- "formattedStars": "37k",
+ "stars": 37563,
+ "formattedStars": "38k",
"license": "Apache License 2.0",
- "lastRelease": "2025-11-03T13:06:45Z",
- "formattedLastRelease": "2 days ago"
+ "lastRelease": "2025-11-14T09:22:34Z",
+ "formattedLastRelease": "4 days ago"
},
"postmanlabs/postman-app-support": {
"hasCommitsInLast3Months": false,
- "stars": 5970,
+ "stars": 5973,
"formattedStars": "6k",
"license": "Unknown",
"lastRelease": "",
@@ -97,11 +97,11 @@
},
"TykTechnologies/tyk": {
"hasCommitsInLast3Months": false,
- "stars": 10466,
+ "stars": 10484,
"formattedStars": "10k",
"license": "Other",
"lastRelease": "2025-10-24T18:32:20Z",
- "formattedLastRelease": "1 week ago"
+ "formattedLastRelease": "3 weeks ago"
},
"twinlogix/typetta": {
"hasCommitsInLast3Months": false,
@@ -113,91 +113,35 @@
},
"webiny/webiny-js": {
"hasCommitsInLast3Months": false,
- "stars": 7879,
+ "stars": 7890,
"formattedStars": "8k",
"license": "Other",
"lastRelease": "2025-09-16T08:29:00Z",
- "formattedLastRelease": "1 month ago"
+ "formattedLastRelease": "2 months ago"
},
- "ballerina-platform/module-ballerina-graphql": {
+ "microsoft/cppgraphqlgen": {
"hasCommitsInLast3Months": false,
"stars": 139,
"formattedStars": "139",
"license": "Apache License 2.0",
"lastRelease": "2025-11-06T10:54:08Z",
- "formattedLastRelease": "14 minutes ago"
- },
- "graphql-dotnet/graphql-client": {
- "hasCommitsInLast3Months": false,
- "stars": 644,
- "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-11-06T09:24:10Z",
- "formattedLastRelease": "1 hour 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": 312,
- "formattedStars": "312",
- "license": "MIT License",
- "lastRelease": "2025-10-14T11:58:44Z",
- "formattedLastRelease": "3 weeks ago"
- },
- "EntityGraphQL/EntityGraphQL": {
- "hasCommitsInLast3Months": false,
- "stars": 446,
- "formattedStars": "446",
- "license": "MIT License",
- "lastRelease": "2025-09-16T00:35:14Z",
- "formattedLastRelease": "1 month ago"
- },
- "graphql-dotnet/graphql-dotnet": {
- "hasCommitsInLast3Months": false,
- "stars": 5974,
- "formattedStars": "6k",
- "license": "MIT License",
- "lastRelease": "2025-10-23T21:34:31Z",
"formattedLastRelease": "1 week ago"
},
- "chkimes/graphql-net": {
+ "microsoft/cppgraphqlgen": {
"hasCommitsInLast3Months": false,
- "stars": 888,
- "formattedStars": "1k",
+ "stars": 344,
+ "formattedStars": "344",
"license": "MIT License",
- "lastRelease": "",
- "formattedLastRelease": ""
+ "lastRelease": "2024-12-10T17:25:31Z",
+ "formattedLastRelease": "11 months ago"
},
- "rivantsov/ngraphql": {
+ "graphql/libgraphqlparser": {
"hasCommitsInLast3Months": false,
- "stars": 47,
- "formattedStars": "47",
+ "stars": 1101,
+ "formattedStars": "1k",
"license": "MIT License",
- "lastRelease": "",
- "formattedLastRelease": ""
+ "lastRelease": "2017-10-16T21:47:42Z",
+ "formattedLastRelease": "8 years ago"
},
"graphql-dotnet/graphql-client": {
"hasCommitsInLast3Months": false,
@@ -220,8 +164,8 @@
"stars": 8,
"formattedStars": "8",
"license": "MIT License",
- "lastRelease": "2025-10-07T07:20:37Z",
- "formattedLastRelease": "2 weeks ago"
+ "lastRelease": "2025-11-14T07:39:17Z",
+ "formattedLastRelease": "4 days ago"
},
"sahb1239/SAHB.GraphQLClient": {
"hasCommitsInLast3Months": false,
@@ -237,23 +181,23 @@
"formattedStars": "312",
"license": "MIT License",
"lastRelease": "2025-10-14T11:58:44Z",
- "formattedLastRelease": "1 week ago"
+ "formattedLastRelease": "1 month ago"
},
"EntityGraphQL/EntityGraphQL": {
"hasCommitsInLast3Months": false,
- "stars": 446,
- "formattedStars": "446",
+ "stars": 448,
+ "formattedStars": "448",
"license": "MIT License",
"lastRelease": "2025-09-16T00:35:14Z",
- "formattedLastRelease": "1 month ago"
+ "formattedLastRelease": "2 months ago"
},
"graphql-dotnet/graphql-dotnet": {
"hasCommitsInLast3Months": false,
- "stars": 5971,
+ "stars": 5977,
"formattedStars": "6k",
"license": "MIT License",
- "lastRelease": "2025-10-23T21:34:31Z",
- "formattedLastRelease": "3 days ago"
+ "lastRelease": "2025-11-17T17:57:35Z",
+ "formattedLastRelease": "1 day ago"
},
"chkimes/graphql-net": {
"hasCommitsInLast3Months": false,
@@ -265,20 +209,12 @@
},
"rivantsov/ngraphql": {
"hasCommitsInLast3Months": false,
- "stars": 46,
- "formattedStars": "46",
+ "stars": 47,
+ "formattedStars": "47",
"license": "MIT License",
"lastRelease": "",
"formattedLastRelease": ""
},
- "graphql/libgraphqlparser": {
- "hasCommitsInLast3Months": false,
- "stars": 1100,
- "formattedStars": "1k",
- "license": "MIT License",
- "lastRelease": "2017-10-16T21:47:42Z",
- "formattedLastRelease": "8 years ago"
- },
"oliyh/re-graph": {
"hasCommitsInLast3Months": false,
"stars": 466,
@@ -305,19 +241,51 @@
},
"walmartlabs/lacinia": {
"hasCommitsInLast3Months": false,
- "stars": 1842,
+ "stars": 1844,
"formattedStars": "2k",
"license": "Other",
"lastRelease": "",
"formattedLastRelease": ""
},
- "burner/graphqld": {
+ "dillonkearns/elm-graphql": {
"hasCommitsInLast3Months": false,
- "stars": 35,
- "formattedStars": "35",
- "license": "GNU Lesser General Public License v3.0",
- "lastRelease": "2024-05-14T13:42:29Z",
- "formattedLastRelease": "1 year ago"
+ "stars": 784,
+ "formattedStars": "1k",
+ "license": "BSD 3-Clause \"New\" or \"Revised\" License",
+ "lastRelease": "",
+ "formattedLastRelease": ""
+ },
+ "gql-dart/ferry": {
+ "hasCommitsInLast3Months": false,
+ "stars": 628,
+ "formattedStars": "1k",
+ "license": "MIT License",
+ "lastRelease": "",
+ "formattedLastRelease": ""
+ },
+ "zino-app/graphql-flutter": {
+ "hasCommitsInLast3Months": false,
+ "stars": 3269,
+ "formattedStars": "3k",
+ "license": "MIT License",
+ "lastRelease": "2025-10-21T16:42:55Z",
+ "formattedLastRelease": "4 weeks ago"
+ },
+ "oliyh/re-graph": {
+ "hasCommitsInLast3Months": false,
+ "stars": 466,
+ "formattedStars": "466",
+ "license": "Unknown",
+ "lastRelease": "2022-07-20T09:24:02Z",
+ "formattedLastRelease": "3 years ago"
+ },
+ "jlouis/graphql-erlang": {
+ "hasCommitsInLast3Months": false,
+ "stars": 314,
+ "formattedStars": "314",
+ "license": "Other",
+ "lastRelease": "2018-06-22T12:35:43Z",
+ "formattedLastRelease": "7 years ago"
},
"annkissam/common_graphql_client": {
"hasCommitsInLast3Months": false,
@@ -335,13 +303,21 @@
"lastRelease": "",
"formattedLastRelease": ""
},
+ "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"
+ },
"absinthe-graphql/absinthe": {
"hasCommitsInLast3Months": false,
- "stars": 4368,
+ "stars": 4369,
"formattedStars": "4k",
"license": "Other",
- "lastRelease": "2025-10-30T13:52:04Z",
- "formattedLastRelease": "6 days ago"
+ "lastRelease": "2025-11-06T13:26:50Z",
+ "formattedLastRelease": "1 week ago"
},
"graphql-elixir/graphql": {
"hasCommitsInLast3Months": false,
@@ -351,7 +327,7 @@
"lastRelease": "2016-09-09T04:49:46Z",
"formattedLastRelease": "9 years ago"
},
- "dillonkearns/elm-graphql": {
+ "ballerina-platform/module-ballerina-graphql": {
"hasCommitsInLast3Months": false,
"stars": 784,
"formattedStars": "1k",
@@ -377,31 +353,31 @@
},
"zino-app/graphql-flutter": {
"hasCommitsInLast3Months": false,
- "stars": 3268,
+ "stars": 3269,
"formattedStars": "3k",
"license": "MIT License",
"lastRelease": "2025-10-21T16:42:55Z",
- "formattedLastRelease": "2 weeks ago"
+ "formattedLastRelease": "4 weeks ago"
},
"Khan/genqlient": {
"hasCommitsInLast3Months": false,
- "stars": 1258,
+ "stars": 1265,
"formattedStars": "1k",
"license": "MIT License",
"lastRelease": "2025-05-18T19:09:08Z",
- "formattedLastRelease": "5 months ago"
+ "formattedLastRelease": "6 months ago"
},
"hasura/go-graphql-client": {
"hasCommitsInLast3Months": false,
- "stars": 452,
- "formattedStars": "452",
+ "stars": 455,
+ "formattedStars": "455",
"license": "MIT License",
"lastRelease": "2025-11-05T06:45:53Z",
- "formattedLastRelease": "1 day ago"
+ "formattedLastRelease": "1 week ago"
},
"shurcooL/graphql": {
"hasCommitsInLast3Months": false,
- "stars": 728,
+ "stars": 727,
"formattedStars": "1k",
"license": "MIT License",
"lastRelease": "",
@@ -415,21 +391,13 @@
"lastRelease": "2018-05-31T14:28:32Z",
"formattedLastRelease": "7 years ago"
},
- "dosco/graphjin": {
- "hasCommitsInLast3Months": false,
- "stars": 2997,
- "formattedStars": "3k",
- "license": "Apache License 2.0",
- "lastRelease": "2025-09-18T06:22:50Z",
- "formattedLastRelease": "1 month ago"
- },
"99designs/gqlgen": {
"hasCommitsInLast3Months": false,
- "stars": 10575,
+ "stars": 10583,
"formattedStars": "11k",
"license": "MIT License",
- "lastRelease": "2025-09-25T23:00:54Z",
- "formattedLastRelease": "1 month ago"
+ "lastRelease": "2025-11-11T02:05:44Z",
+ "formattedLastRelease": "1 week ago"
},
"andrewwphillips/eggql": {
"hasCommitsInLast3Months": false,
@@ -449,15 +417,15 @@
},
"graph-gophers/graphql-go": {
"hasCommitsInLast3Months": false,
- "stars": 4733,
+ "stars": 4739,
"formattedStars": "5k",
"license": "BSD 2-Clause \"Simplified\" License",
"lastRelease": "2025-09-09T11:37:07Z",
- "formattedLastRelease": "1 month ago"
+ "formattedLastRelease": "2 months ago"
},
"graphql-go/graphql": {
"hasCommitsInLast3Months": false,
- "stars": 10124,
+ "stars": 10129,
"formattedStars": "10k",
"license": "MIT License",
"lastRelease": "2023-04-10T18:20:23Z",
@@ -484,16 +452,16 @@
"stars": 790,
"formattedStars": "1k",
"license": "MIT License",
- "lastRelease": "2025-10-31T00:41:38Z",
- "formattedLastRelease": "6 days ago"
+ "lastRelease": "2025-11-17T08:37:55Z",
+ "formattedLastRelease": "1 day ago"
},
"dosco/graphjin": {
"hasCommitsInLast3Months": false,
- "stars": 3000,
+ "stars": 3002,
"formattedStars": "3k",
"license": "Apache License 2.0",
"lastRelease": "2025-11-05T07:51:12Z",
- "formattedLastRelease": "1 day ago"
+ "formattedLastRelease": "1 week ago"
},
"grails/gorm-graphql": {
"hasCommitsInLast3Months": false,
@@ -513,8 +481,8 @@
},
"morpheusgraphql/morpheus-graphql": {
"hasCommitsInLast3Months": false,
- "stars": 417,
- "formattedStars": "417",
+ "stars": 418,
+ "formattedStars": "418",
"license": "MIT License",
"lastRelease": "2024-06-10T08:34:35Z",
"formattedLastRelease": "1 year ago"
@@ -535,21 +503,37 @@
"lastRelease": "2021-01-11T11:19:38Z",
"formattedLastRelease": "4 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": "1 year ago"
+ },
"apollographql/apollo-kotlin": {
"hasCommitsInLast3Months": false,
- "stars": 3918,
+ "stars": 3927,
"formattedStars": "4k",
"license": "MIT License",
- "lastRelease": "2025-08-21T15:31:08Z",
- "formattedLastRelease": "2 months ago"
+ "lastRelease": "2025-11-13T17:33:51Z",
+ "formattedLastRelease": "5 days ago"
},
"ExpediaGroup/graphql-kotlin": {
"hasCommitsInLast3Months": false,
- "stars": 1789,
+ "stars": 1795,
"formattedStars": "2k",
"license": "Apache License 2.0",
"lastRelease": "2025-06-16T17:02:18Z",
- "formattedLastRelease": "4 months ago"
+ "formattedLastRelease": "5 months ago"
},
"americanexpress/nodes": {
"hasCommitsInLast3Months": false,
@@ -569,7 +553,7 @@
},
"graphql-java-kickstart/graphql-spring-boot": {
"hasCommitsInLast3Months": false,
- "stars": 1514,
+ "stars": 1513,
"formattedStars": "2k",
"license": "MIT License",
"lastRelease": "2023-12-07T11:07:47Z",
@@ -577,24 +561,24 @@
},
"graphql-java/graphql-java": {
"hasCommitsInLast3Months": false,
- "stars": 6224,
+ "stars": 6226,
"formattedStars": "6k",
"license": "MIT License",
- "lastRelease": "2025-10-12T21:04:23Z",
- "formattedLastRelease": "3 weeks ago"
+ "lastRelease": "2025-11-10T01:21:35Z",
+ "formattedLastRelease": "1 week ago"
},
"babyfish-ct/jimmer": {
"hasCommitsInLast3Months": false,
- "stars": 1538,
+ "stars": 1552,
"formattedStars": "2k",
"license": "Apache License 2.0",
- "lastRelease": "2025-11-04T23:19:50Z",
+ "lastRelease": "2025-11-17T08:58:28Z",
"formattedLastRelease": "1 day ago"
},
"aPureBase/KGraphQL": {
"hasCommitsInLast3Months": false,
- "stars": 307,
- "formattedStars": "307",
+ "stars": 308,
+ "formattedStars": "308",
"license": "MIT License",
"lastRelease": "2023-01-27T10:09:55Z",
"formattedLastRelease": "2 years ago"
@@ -609,19 +593,19 @@
},
"netflix/dgs-framework": {
"hasCommitsInLast3Months": false,
- "stars": 3270,
+ "stars": 3275,
"formattedStars": "3k",
"license": "Apache License 2.0",
- "lastRelease": "2025-10-29T17:28:56Z",
+ "lastRelease": "2025-11-08T16:22:51Z",
"formattedLastRelease": "1 week ago"
},
"spring-projects/spring-graphql": {
"hasCommitsInLast3Months": false,
- "stars": 1576,
+ "stars": 1578,
"formattedStars": "2k",
"license": "Apache License 2.0",
- "lastRelease": "2025-11-04T08:35:52Z",
- "formattedLastRelease": "2 days ago"
+ "lastRelease": "2025-11-18T10:05:26Z",
+ "formattedLastRelease": "11 hours ago"
},
"graphql-java-generator/graphql-gradle-plugin-project": {
"hasCommitsInLast3Months": false,
@@ -631,21 +615,45 @@
"lastRelease": "",
"formattedLastRelease": ""
},
+ "neomatrixcode/Diana.jl": {
+ "hasCommitsInLast3Months": false,
+ "stars": 117,
+ "formattedStars": "117",
+ "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": "3 years ago"
+ },
+ "andreas/ocaml-graphql-server": {
+ "hasCommitsInLast3Months": false,
+ "stars": 621,
+ "formattedStars": "1k",
+ "license": "MIT License",
+ "lastRelease": "2022-07-08T16:26:45Z",
+ "formattedLastRelease": "3 years ago"
+ },
"apollographql/apollo-client": {
"hasCommitsInLast3Months": false,
- "stars": 19663,
+ "stars": 19672,
"formattedStars": "20k",
"license": "MIT License",
- "lastRelease": "2025-10-31T17:11:18Z",
- "formattedLastRelease": "5 days ago"
+ "lastRelease": "2025-11-17T21:21:55Z",
+ "formattedLastRelease": "1 day ago"
},
"aws-amplify/amplify-js": {
"hasCommitsInLast3Months": false,
- "stars": 9560,
+ "stars": 9565,
"formattedStars": "10k",
"license": "Apache License 2.0",
- "lastRelease": "2025-09-29T15:51:39Z",
- "formattedLastRelease": "1 month ago"
+ "lastRelease": "2025-11-06T13:36:19Z",
+ "formattedLastRelease": "1 week ago"
},
"Houfeng/gq-loader": {
"hasCommitsInLast3Months": false,
@@ -657,11 +665,11 @@
},
"gqty-dev/gqty": {
"hasCommitsInLast3Months": false,
- "stars": 1030,
+ "stars": 1031,
"formattedStars": "1k",
"license": "MIT License",
"lastRelease": "2025-10-26T19:29:38Z",
- "formattedLastRelease": "1 week ago"
+ "formattedLastRelease": "3 weeks ago"
},
"grafoojs/grafoo": {
"hasCommitsInLast3Months": false,
@@ -685,19 +693,19 @@
"formattedStars": "2k",
"license": "Other",
"lastRelease": "2025-01-08T18:45:52Z",
- "formattedLastRelease": "9 months ago"
+ "formattedLastRelease": "10 months ago"
},
"graphql/graphql-http": {
"hasCommitsInLast3Months": false,
- "stars": 355,
- "formattedStars": "355",
+ "stars": 357,
+ "formattedStars": "357",
"license": "MIT License",
"lastRelease": "2025-01-17T14:16:52Z",
- "formattedLastRelease": "9 months ago"
+ "formattedLastRelease": "10 months ago"
},
"jasonkuhrt/graphql-request": {
"hasCommitsInLast3Months": false,
- "stars": 6068,
+ "stars": 6075,
"formattedStars": "6k",
"license": "MIT License",
"lastRelease": "2020-05-29T13:00:56Z",
@@ -705,31 +713,31 @@
},
"enisdenjo/graphql-sse": {
"hasCommitsInLast3Months": false,
- "stars": 434,
- "formattedStars": "434",
+ "stars": 435,
+ "formattedStars": "435",
"license": "MIT License",
"lastRelease": "2025-10-22T16:19:40Z",
- "formattedLastRelease": "2 weeks ago"
+ "formattedLastRelease": "3 weeks ago"
},
"babyfish-ct/graphql-ts-client": {
"hasCommitsInLast3Months": false,
- "stars": 149,
- "formattedStars": "149",
+ "stars": 150,
+ "formattedStars": "150",
"license": "MIT License",
"lastRelease": "2023-12-14T03:06:21Z",
"formattedLastRelease": "1 year ago"
},
"enisdenjo/graphql-ws": {
"hasCommitsInLast3Months": false,
- "stars": 1840,
+ "stars": 1842,
"formattedStars": "2k",
"license": "MIT License",
"lastRelease": "2025-07-14T12:15:37Z",
- "formattedLastRelease": "3 months ago"
+ "formattedLastRelease": "4 months ago"
},
"hasura/graphqurl": {
"hasCommitsInLast3Months": false,
- "stars": 3375,
+ "stars": 3376,
"formattedStars": "3k",
"license": "Apache License 2.0",
"lastRelease": "",
@@ -753,7 +761,7 @@
},
"facebook/relay": {
"hasCommitsInLast3Months": false,
- "stars": 18878,
+ "stars": 18887,
"formattedStars": "19k",
"license": "MIT License",
"lastRelease": "2025-08-06T23:45:00Z",
@@ -761,7 +769,7 @@
},
"FormidableLabs/urql": {
"hasCommitsInLast3Months": false,
- "stars": 8890,
+ "stars": 8893,
"formattedStars": "9k",
"license": "MIT License",
"lastRelease": "2025-08-29T08:06:41Z",
@@ -769,83 +777,67 @@
},
"apollographql/apollo-server": {
"hasCommitsInLast3Months": false,
- "stars": 13917,
+ "stars": 13924,
"formattedStars": "14k",
"license": "MIT License",
"lastRelease": "2025-10-28T15:47:16Z",
- "formattedLastRelease": "1 week ago"
+ "formattedLastRelease": "3 weeks ago"
},
"graphql/graphql-js": {
"hasCommitsInLast3Months": false,
- "stars": 20271,
+ "stars": 20270,
"formattedStars": "20k",
"license": "MIT License",
"lastRelease": "2025-11-01T14:18:53Z",
- "formattedLastRelease": "4 days ago"
+ "formattedLastRelease": "2 weeks ago"
},
"dotansimha/graphql-yoga": {
"hasCommitsInLast3Months": false,
- "stars": 8447,
+ "stars": 8452,
"formattedStars": "8k",
"license": "MIT License",
- "lastRelease": "2025-11-04T15:51:36Z",
- "formattedLastRelease": "1 day ago"
+ "lastRelease": "2025-11-07T02:09:51Z",
+ "formattedLastRelease": "1 week ago"
},
"mercurius-js/mercurius": {
"hasCommitsInLast3Months": false,
- "stars": 2450,
+ "stars": 2456,
"formattedStars": "2k",
"license": "MIT License",
- "lastRelease": "2025-10-10T09:11:58Z",
- "formattedLastRelease": "3 weeks ago"
+ "lastRelease": "2025-11-13T14:12:18Z",
+ "formattedLastRelease": "5 days ago"
},
"getcronit/pylon": {
"hasCommitsInLast3Months": false,
- "stars": 342,
- "formattedStars": "342",
+ "stars": 343,
+ "formattedStars": "343",
"license": "Apache License 2.0",
"lastRelease": "2025-10-01T08:35:15Z",
"formattedLastRelease": "1 month ago"
},
- "neomatrixcode/Diana.jl": {
- "hasCommitsInLast3Months": false,
- "stars": 117,
- "formattedStars": "117",
- "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": "3 years ago"
- },
"networkimprov/brangr": {
"hasCommitsInLast3Months": false,
- "stars": 4,
- "formattedStars": "4",
+ "stars": 5,
+ "formattedStars": "5",
"license": "Mozilla Public License 2.0",
"lastRelease": "2023-06-02T09:20:18Z",
"formattedLastRelease": "2 years ago"
},
"hayes/giraphql": {
"hasCommitsInLast3Months": false,
- "stars": 2547,
+ "stars": 2553,
"formattedStars": "3k",
"license": "ISC License",
- "lastRelease": "2025-10-20T17:43:11Z",
- "formattedLastRelease": "2 weeks ago"
+ "lastRelease": "2025-11-10T01:29:18Z",
+ "formattedLastRelease": "1 week ago"
},
"graphql/graphiql": {
"hasCommitsInLast3Months": false,
- "stars": 16687,
+ "stars": 16706,
"formattedStars": "17k",
"license": "MIT License",
"lastRelease": "2025-11-01T22:30:04Z",
- "formattedLastRelease": "4 days ago"
+ "formattedLastRelease": "2 weeks ago"
},
"Urigo/graphql-cli": {
"hasCommitsInLast3Months": false,
@@ -857,11 +849,11 @@
},
"dotansimha/graphql-code-generator": {
"hasCommitsInLast3Months": false,
- "stars": 11170,
+ "stars": 11175,
"formattedStars": "11k",
"license": "MIT License",
- "lastRelease": "2025-10-30T14:30:07Z",
- "formattedLastRelease": "6 days ago"
+ "lastRelease": "2025-11-13T15:19:33Z",
+ "formattedLastRelease": "5 days ago"
},
"kamilkisiela/graphql-config": {
"hasCommitsInLast3Months": false,
@@ -873,7 +865,7 @@
},
"dimaMachina/graphql-eslint/": {
"hasCommitsInLast3Months": false,
- "stars": 831,
+ "stars": 830,
"formattedStars": "1k",
"license": "MIT License",
"lastRelease": "2025-03-26T14:11:23Z",
@@ -881,11 +873,11 @@
},
"kamilkisiela/graphql-inspector": {
"hasCommitsInLast3Months": false,
- "stars": 1726,
+ "stars": 1727,
"formattedStars": "2k",
"license": "MIT License",
- "lastRelease": "2024-12-09T13:34:14Z",
- "formattedLastRelease": "10 months ago"
+ "lastRelease": "2025-11-15T02:42:13Z",
+ "formattedLastRelease": "3 days ago"
},
"graphql/graphql-language-service": {
"hasCommitsInLast3Months": false,
@@ -905,11 +897,11 @@
},
"Urigo/graphql-mesh": {
"hasCommitsInLast3Months": false,
- "stars": 3450,
+ "stars": 3459,
"formattedStars": "3k",
"license": "MIT License",
- "lastRelease": "2025-11-05T20:58:23Z",
- "formattedLastRelease": "14 hours ago"
+ "lastRelease": "2025-11-07T23:26:14Z",
+ "formattedLastRelease": "1 week ago"
},
"maticzav/graphql-middleware": {
"hasCommitsInLast3Months": false,
@@ -921,7 +913,7 @@
},
"Urigo/graphql-modules": {
"hasCommitsInLast3Months": false,
- "stars": 1329,
+ "stars": 1328,
"formattedStars": "1k",
"license": "MIT License",
"lastRelease": "2025-02-19T10:43:37Z",
@@ -929,15 +921,15 @@
},
"Urigo/graphql-scalars": {
"hasCommitsInLast3Months": false,
- "stars": 1924,
+ "stars": 1925,
"formattedStars": "2k",
"license": "MIT License",
"lastRelease": "2025-10-14T23:00:24Z",
- "formattedLastRelease": "3 weeks ago"
+ "formattedLastRelease": "1 month ago"
},
"maticzav/graphql-shield": {
"hasCommitsInLast3Months": false,
- "stars": 3569,
+ "stars": 3573,
"formattedStars": "4k",
"license": "MIT License",
"lastRelease": "2022-11-22T19:08:37Z",
@@ -948,8 +940,8 @@
"stars": 5420,
"formattedStars": "5k",
"license": "MIT License",
- "lastRelease": "2025-11-04T15:42:44Z",
- "formattedLastRelease": "1 day ago"
+ "lastRelease": "2025-11-12T10:07:43Z",
+ "formattedLastRelease": "6 days ago"
},
"anvilco/graphql-introspection-tools": {
"hasCommitsInLast3Months": false,
@@ -961,7 +953,7 @@
},
"graphile/postgraphile": {
"hasCommitsInLast3Months": false,
- "stars": 12837,
+ "stars": 12852,
"formattedStars": "13k",
"license": "Other",
"lastRelease": "2023-10-05T16:27:00Z",
@@ -969,20 +961,36 @@
},
"Urigo/SOFA": {
"hasCommitsInLast3Months": false,
- "stars": 1110,
+ "stars": 1111,
"formattedStars": "1k",
"license": "MIT License",
"lastRelease": "2024-12-16T10:06:41Z",
- "formattedLastRelease": "10 months ago"
+ "formattedLastRelease": "11 months ago"
},
"anvilco/spectaql": {
"hasCommitsInLast3Months": false,
- "stars": 1189,
+ "stars": 1203,
"formattedStars": "1k",
"license": "MIT License",
"lastRelease": "",
"formattedLastRelease": ""
},
+ "neomatrixcode/Diana.jl": {
+ "hasCommitsInLast3Months": false,
+ "stars": 117,
+ "formattedStars": "117",
+ "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": "3 years ago"
+ },
"andreas/ocaml-graphql-server": {
"hasCommitsInLast3Months": false,
"stars": 621,
@@ -1001,11 +1009,11 @@
},
"api-platform/api-platform": {
"hasCommitsInLast3Months": false,
- "stars": 9041,
+ "stars": 9045,
"formattedStars": "9k",
"license": "MIT License",
"lastRelease": "2025-03-11T16:15:41Z",
- "formattedLastRelease": "7 months ago"
+ "formattedLastRelease": "8 months ago"
},
"GatoGraphQL/GatoGraphQL": {
"hasCommitsInLast3Months": false,
@@ -1013,7 +1021,7 @@
"formattedStars": "376",
"license": "GNU General Public License v2.0",
"lastRelease": "2025-10-17T15:10:13Z",
- "formattedLastRelease": "2 weeks ago"
+ "formattedLastRelease": "1 month ago"
},
"infinityloop-dev/graphpinator": {
"hasCommitsInLast3Months": false,
@@ -1029,15 +1037,15 @@
"formattedStars": "16",
"license": "MIT License",
"lastRelease": "2025-10-11T09:19:14Z",
- "formattedLastRelease": "3 weeks ago"
+ "formattedLastRelease": "1 month ago"
},
"webonyx/graphql-php": {
"hasCommitsInLast3Months": false,
- "stars": 4696,
+ "stars": 4700,
"formattedStars": "5k",
"license": "MIT License",
"lastRelease": "2025-10-25T09:34:10Z",
- "formattedLastRelease": "1 week ago"
+ "formattedLastRelease": "3 weeks ago"
},
"ivome/graphql-relay-php": {
"hasCommitsInLast3Months": false,
@@ -1053,7 +1061,7 @@
"formattedStars": "1k",
"license": "MIT License",
"lastRelease": "2025-10-31T08:00:22Z",
- "formattedLastRelease": "6 days ago"
+ "formattedLastRelease": "2 weeks ago"
},
"thecodingmachine/graphqlite": {
"hasCommitsInLast3Months": false,
@@ -1069,7 +1077,7 @@
"formattedStars": "3k",
"license": "MIT License",
"lastRelease": "2025-09-11T08:07:50Z",
- "formattedLastRelease": "1 month ago"
+ "formattedLastRelease": "2 months ago"
},
"railt/railt": {
"hasCommitsInLast3Months": false,
@@ -1097,23 +1105,23 @@
},
"wp-graphql/wp-graphql": {
"hasCommitsInLast3Months": false,
- "stars": 3757,
+ "stars": 3759,
"formattedStars": "4k",
"license": "GNU General Public License v3.0",
"lastRelease": "2025-10-30T16:56:08Z",
- "formattedLastRelease": "6 days ago"
+ "formattedLastRelease": "2 weeks ago"
},
"mirumee/ariadne-codegen": {
"hasCommitsInLast3Months": false,
- "stars": 359,
- "formattedStars": "359",
+ "stars": 361,
+ "formattedStars": "361",
"license": "BSD 3-Clause \"New\" or \"Revised\" License",
"lastRelease": "2025-10-13T06:38:02Z",
- "formattedLastRelease": "3 weeks ago"
+ "formattedLastRelease": "1 month ago"
},
"graphql-python/gql": {
"hasCommitsInLast3Months": false,
- "stars": 1645,
+ "stars": 1649,
"formattedStars": "2k",
"license": "MIT License",
"lastRelease": "2025-09-05T14:22:54Z",
@@ -1129,8 +1137,8 @@
},
"prisma-labs/python-graphql-client": {
"hasCommitsInLast3Months": false,
- "stars": 156,
- "formattedStars": "156",
+ "stars": 157,
+ "formattedStars": "157",
"license": "MIT License",
"lastRelease": "",
"formattedLastRelease": ""
@@ -1161,11 +1169,11 @@
},
"mirumee/ariadne": {
"hasCommitsInLast3Months": false,
- "stars": 2306,
+ "stars": 2307,
"formattedStars": "2k",
"license": "BSD 3-Clause \"New\" or \"Revised\" License",
"lastRelease": "2025-04-18T08:27:47Z",
- "formattedLastRelease": "6 months ago"
+ "formattedLastRelease": "7 months ago"
},
"yefeza/django-graphbox": {
"hasCommitsInLast3Months": false,
@@ -1185,19 +1193,19 @@
},
"graphql-python/graphene": {
"hasCommitsInLast3Months": false,
- "stars": 8233,
+ "stars": 8238,
"formattedStars": "8k",
"license": "MIT License",
"lastRelease": "2024-11-09T20:43:58Z",
- "formattedLastRelease": "11 months ago"
+ "formattedLastRelease": "1 year ago"
},
"strawberry-graphql/strawberry": {
"hasCommitsInLast3Months": false,
- "stars": 4457,
+ "stars": 4467,
"formattedStars": "4k",
"license": "MIT License",
- "lastRelease": "2025-11-05T19:14:26Z",
- "formattedLastRelease": "15 hours ago"
+ "lastRelease": "2025-11-18T18:05:57Z",
+ "formattedLastRelease": "3 hours ago"
},
"tartiflette/tartiflette": {
"hasCommitsInLast3Months": false,
@@ -1205,7 +1213,7 @@
"formattedStars": "1k",
"license": "MIT License",
"lastRelease": "2021-11-15T11:05:03Z",
- "formattedLastRelease": "3 years ago"
+ "formattedLastRelease": "4 years ago"
},
"ropensci/ghql": {
"hasCommitsInLast3Months": false,
@@ -1213,7 +1221,7 @@
"formattedStars": "149",
"license": "Other",
"lastRelease": "2025-09-08T08:41:00Z",
- "formattedLastRelease": "1 month ago"
+ "formattedLastRelease": "2 months ago"
},
"ohler55/agoo": {
"hasCommitsInLast3Months": false,
@@ -1225,11 +1233,11 @@
},
"rmosolgo/graphql-ruby": {
"hasCommitsInLast3Months": false,
- "stars": 5427,
+ "stars": 5428,
"formattedStars": "5k",
"license": "MIT License",
"lastRelease": "2025-07-19T17:15:49Z",
- "formattedLastRelease": "3 months ago"
+ "formattedLastRelease": "4 months ago"
},
"virtualshield/rails-graphql": {
"hasCommitsInLast3Months": false,
@@ -1245,7 +1253,7 @@
"formattedStars": "440",
"license": "Mozilla Public License 2.0",
"lastRelease": "2025-08-19T19:37:22Z",
- "formattedLastRelease": "2 months ago"
+ "formattedLastRelease": "3 months ago"
},
"arthurkhlghatyan/gql-client-rs": {
"hasCommitsInLast3Months": false,
@@ -1253,11 +1261,19 @@
"formattedStars": "51",
"license": "MIT License",
"lastRelease": "2025-06-07T14:31:10Z",
+ "formattedLastRelease": "5 months ago"
+ },
+ "ghostdogpr/caliban": {
+ "hasCommitsInLast3Months": false,
+ "stars": 975,
+ "formattedStars": "1k",
+ "license": "Apache License 2.0",
+ "lastRelease": "2025-07-14T00:24:20Z",
"formattedLastRelease": "4 months ago"
},
"async-graphql/async-graphql": {
"hasCommitsInLast3Months": false,
- "stars": 3585,
+ "stars": 3588,
"formattedStars": "4k",
"license": "Apache License 2.0",
"lastRelease": "",
@@ -1265,19 +1281,19 @@
},
"graphql-rust/juniper": {
"hasCommitsInLast3Months": false,
- "stars": 5899,
+ "stars": 5911,
"formattedStars": "6k",
"license": "Other",
"lastRelease": "2025-09-08T23:23:40Z",
- "formattedLastRelease": "1 month ago"
+ "formattedLastRelease": "2 months ago"
},
- "ghostdogpr/caliban": {
+ "apollographql/router": {
"hasCommitsInLast3Months": false,
- "stars": 975,
+ "stars": 938,
"formattedStars": "1k",
- "license": "Apache License 2.0",
- "lastRelease": "2025-07-14T00:24:20Z",
- "formattedLastRelease": "3 months ago"
+ "license": "Other",
+ "lastRelease": "2025-11-11T14:49:10Z",
+ "formattedLastRelease": "1 week ago"
},
"sangria-graphql/sangria": {
"hasCommitsInLast3Months": false,
@@ -1285,15 +1301,71 @@
"formattedStars": "2k",
"license": "Apache License 2.0",
"lastRelease": "2025-10-20T11:40:30Z",
- "formattedLastRelease": "2 weeks ago"
+ "formattedLastRelease": "4 weeks ago"
+ },
+ "eerimoq/gqt": {
+ "hasCommitsInLast3Months": false,
+ "stars": 470,
+ "formattedStars": "470",
+ "license": "MIT License",
+ "lastRelease": "",
+ "formattedLastRelease": ""
+ },
+ "Escape-Technologies/graphql-armor": {
+ "hasCommitsInLast3Months": false,
+ "stars": 553,
+ "formattedStars": "1k",
+ "license": "MIT License",
+ "lastRelease": "2025-08-22T13:32:40Z",
+ "formattedLastRelease": "2 months ago"
+ },
+ "ldebruijn/graphql-protect": {
+ "hasCommitsInLast3Months": false,
+ "stars": 34,
+ "formattedStars": "34",
+ "license": "MIT License",
+ "lastRelease": "2025-09-09T20:03:39Z",
+ "formattedLastRelease": "2 months ago"
+ },
+ "graphql-hive/gateway": {
+ "hasCommitsInLast3Months": false,
+ "stars": 68,
+ "formattedStars": "68",
+ "license": "MIT License",
+ "lastRelease": "2025-11-11T14:50:09Z",
+ "formattedLastRelease": "1 week ago"
+ },
+ "microcks/microcks": {
+ "hasCommitsInLast3Months": false,
+ "stars": 1746,
+ "formattedStars": "2k",
+ "license": "Apache License 2.0",
+ "lastRelease": "2025-10-25T15:08:00Z",
+ "formattedLastRelease": "3 weeks ago"
+ },
+ "glideapps/quicktype": {
+ "hasCommitsInLast3Months": false,
+ "stars": 13438,
+ "formattedStars": "13k",
+ "license": "Apache License 2.0",
+ "lastRelease": "",
+ "formattedLastRelease": ""
+ },
+ "schemathesis/schemathesis": {
+ "hasCommitsInLast3Months": false,
+ "stars": 2852,
+ "formattedStars": "3k",
+ "license": "MIT License",
+ "lastRelease": "2025-11-18T17:07:09Z",
+ "formattedLastRelease": "4 hours ago"
},
"apollographql/apollo-ios": {
"hasCommitsInLast3Months": false,
- "stars": 4005,
+ "stars": 4008,
"formattedStars": "4k",
"license": "MIT License",
"lastRelease": "2025-11-05T23:30:57Z",
- "formattedLastRelease": "11 hours ago"
+ "formattedLastRelease": "1 week ago"
},
"nerdsupremacist/Graphaello": {
"hasCommitsInLast3Months": false,
@@ -1313,7 +1385,7 @@
},
"maticzav/swift-graphql": {
"hasCommitsInLast3Months": false,
- "stars": 619,
+ "stars": 621,
"formattedStars": "1k",
"license": "MIT License",
"lastRelease": "2024-05-06T20:00:06Z",
@@ -1335,76 +1407,12 @@
"lastRelease": "2021-05-17T12:51:10Z",
"formattedLastRelease": "4 years ago"
},
- "apollographql/router": {
- "hasCommitsInLast3Months": false,
- "stars": 936,
- "formattedStars": "1k",
- "license": "Other",
- "lastRelease": "2025-11-04T16:58:39Z",
- "formattedLastRelease": "1 day ago"
- },
- "eerimoq/gqt": {
- "hasCommitsInLast3Months": false,
- "stars": 471,
- "formattedStars": "471",
- "license": "MIT License",
- "lastRelease": "",
- "formattedLastRelease": ""
- },
- "Escape-Technologies/graphql-armor": {
- "hasCommitsInLast3Months": false,
- "stars": 550,
- "formattedStars": "1k",
- "license": "MIT License",
- "lastRelease": "2025-08-22T13:32:40Z",
- "formattedLastRelease": "2 months ago"
- },
- "ldebruijn/graphql-protect": {
- "hasCommitsInLast3Months": false,
- "stars": 34,
- "formattedStars": "34",
- "license": "MIT License",
- "lastRelease": "2025-09-09T20:03:39Z",
- "formattedLastRelease": "1 month ago"
- },
- "graphql-hive/gateway": {
- "hasCommitsInLast3Months": false,
- "stars": 65,
- "formattedStars": "65",
- "license": "MIT License",
- "lastRelease": "2025-11-01T14:42:06Z",
- "formattedLastRelease": "4 days ago"
- },
- "microcks/microcks": {
- "hasCommitsInLast3Months": false,
- "stars": 1733,
- "formattedStars": "2k",
- "license": "Apache License 2.0",
- "lastRelease": "2025-10-25T15:08:00Z",
- "formattedLastRelease": "1 week ago"
- },
- "glideapps/quicktype": {
- "hasCommitsInLast3Months": false,
- "stars": 13414,
- "formattedStars": "13k",
- "license": "Apache License 2.0",
- "lastRelease": "",
- "formattedLastRelease": ""
- },
- "schemathesis/schemathesis": {
- "hasCommitsInLast3Months": false,
- "stars": 2828,
- "formattedStars": "3k",
- "license": "MIT License",
- "lastRelease": "2025-11-06T00:26:15Z",
- "formattedLastRelease": "10 hours ago"
- },
"wundergraph/cosmo": {
"hasCommitsInLast3Months": false,
- "stars": 1111,
+ "stars": 1115,
"formattedStars": "1k",
"license": "Apache License 2.0",
- "lastRelease": "2025-10-31T01:22:40Z",
- "formattedLastRelease": "6 days ago"
+ "lastRelease": "2025-11-17T21:18:03Z",
+ "formattedLastRelease": "1 day ago"
}
}
diff --git a/scripts/get-github-info/last-success.isodate b/scripts/get-github-info/last-success.isodate
index 8cd7883166..165fd416b5 100644
--- a/scripts/get-github-info/last-success.isodate
+++ b/scripts/get-github-info/last-success.isodate
@@ -1 +1 @@
-2025-11-06T11:11:00.490Z
+2025-11-18T21:48:50.765Z
diff --git a/scripts/sync-landing-schema/.last-sync.isodate b/scripts/sync-landing-schema/.last-sync.isodate
index d60b4e5a28..1ceb6cfd01 100644
--- a/scripts/sync-landing-schema/.last-sync.isodate
+++ b/scripts/sync-landing-schema/.last-sync.isodate
@@ -1 +1 @@
-2025-10-27T20:18:16.064Z
\ No newline at end of file
+2025-11-19T01:40:44.624Z
\ No newline at end of file
diff --git a/scripts/sync-landing-schema/.sync-state.json b/scripts/sync-landing-schema/.sync-state.json
index ce5dcb693d..f53bbd399b 100644
--- a/scripts/sync-landing-schema/.sync-state.json
+++ b/scripts/sync-landing-schema/.sync-state.json
@@ -3,19 +3,19 @@
"repositories": {
"graphql/graphiql": {
"lastCursor": "b3c42a65160ba4878b5ea87d9e72385889856464 4096",
- "lastProcessed": "2025-10-27T20:18:16.061Z"
+ "lastProcessed": "2025-11-19T01:40:44.623Z"
},
"graphql/graphql-spec": {
"lastCursor": "43ae7baced54e37c68676b1ac5902e6223dcb078 650",
- "lastProcessed": "2025-10-27T20:18:14.496Z"
+ "lastProcessed": "2025-11-19T01:40:43.443Z"
},
"graphql/graphql-wg": {
"lastCursor": "139d0b9cbe74756974c7e637d85e0283beb36297 2077",
- "lastProcessed": "2025-10-27T20:18:15.063Z"
+ "lastProcessed": "2025-11-19T01:40:43.783Z"
},
"graphql/graphql-js": {
"lastCursor": "60ae6c48b9c78332bf3d6036e7d931a3617d0674 3244",
- "lastProcessed": "2025-10-27T20:18:15.684Z"
+ "lastProcessed": "2025-11-19T01:40:44.294Z"
}
}
}
\ No newline at end of file
diff --git a/scripts/sync-sched/schedule-2025.json b/scripts/sync-sched/schedule-2025.json
index dd3ec2e4a2..1cdd813910 100644
--- a/scripts/sync-sched/schedule-2025.json
+++ b/scripts/sync-sched/schedule-2025.json
@@ -8,7 +8,7 @@
"event_end": "2025-09-07 17:00",
"event_type": "Breaks / Networking / Special Events",
"description": "GraphQLConf Canal Cruise - Separate Registration Required\n\nJoin us on Sunday 7 September for this pre GraphQLConf'25 event, a must-do activity in Amsterdam; a wonderful canal cruise in the historical city centre of Amsterdam.\n\nInitiative by the local Amsterdam GraphQL Meetup group.\n\nA great opportunity to meet your peer-attendees of the GraphQLConf'25 during this great sight-seeing activity.\n\nPlease RSVP by Wednesday September 3rd!\n\nLocation: in the city centre (tba exact location)\nDuration of the canal cruise: 16:00-17:00 on Sunday 7 September\nPlease be 15:45 at the location (to buy the ticket etc).\n\nCost per person: 10-15 euro* (depending on the number of attendees)\n*not included in the conference ticket",
- "goers": "4",
+ "goers": "5",
"seats": "0",
"invite_only": "N",
"id": "04a893e9dfa070fae1dfa767608ad0c0",
@@ -211,6 +211,7 @@
"invite_only": "N",
"venue": "Grote Zaal - 2nd Floor",
"audience": "Any",
+ "geo_area": "Yes",
"id": "f31a60c9bffdbc04ea8fe446bd8d644b",
"venue_id": "2152800",
"speakers": [
@@ -255,6 +256,12 @@
"start_time_ts": 1757315700,
"end_date": "2025-09-08",
"end_time": "09:35:00",
+ "files": [
+ {
+ "path": "https://static.sched.com/hosted_files/graphqlconf2025/60/Community Update GraphQLConf 2025.pdf",
+ "name": "Community Update GraphQLConf 2025.pdf"
+ }
+ ],
"event_subtype": ""
},
{
@@ -377,6 +384,7 @@
"invite_only": "N",
"venue": "Grote Zaal - 2nd Floor",
"audience": "Any",
+ "geo_area": "Yes",
"id": "3d0c8511f9632541f3f52a9ea020755d",
"venue_id": "2152800",
"speakers": [
@@ -407,6 +415,12 @@
"start_time_ts": 1757318700,
"end_date": "2025-09-08",
"end_time": "10:15:00",
+ "files": [
+ {
+ "path": "https://static.sched.com/hosted_files/graphqlconf2025/cf/Apollo GraphQL _ GraphQL Conf 2025 Matt DeBergalis Keynote.pdf",
+ "name": "Apollo GraphQL _ GraphQL Conf 2025 Matt DeBergalis Keynote.pdf"
+ }
+ ],
"event_subtype": ""
},
{
diff --git a/scripts/sync-sched/speakers.json b/scripts/sync-sched/speakers.json
index d52f8affb4..667a7d79e7 100644
--- a/scripts/sync-sched/speakers.json
+++ b/scripts/sync-sched/speakers.json
@@ -126,7 +126,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137788992
+ "~syncedDetailsAt": 1763505798733
},
{
"username": "aditi_rajawat",
@@ -503,7 +503,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758114083720
+ "~syncedDetailsAt": 1763505762536
},
{
"username": "ardatanrikulu",
@@ -605,7 +605,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758114083720
+ "~syncedDetailsAt": 1763505762536
},
{
"username": "benjie3",
@@ -646,7 +646,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758114083720
+ "~syncedDetailsAt": 1763505762536
},
{
"username": "borisbesemer",
@@ -661,7 +661,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137781378
+ "~syncedDetailsAt": 1763505775361
},
{
"username": "brandon.r.minnick",
@@ -850,7 +850,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137781378
+ "~syncedDetailsAt": 1763505775361
},
{
"username": "danadajian",
@@ -885,7 +885,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137781378
+ "~syncedDetailsAt": 1763505775361
},
{
"username": "danielle.man",
@@ -930,7 +930,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137784031
+ "~syncedDetailsAt": 1763505778157
},
{
"username": "dkuc",
@@ -1171,7 +1171,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137784031
+ "~syncedDetailsAt": 1763505778157
},
{
"username": "fbjork",
@@ -1230,7 +1230,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137784031
+ "~syncedDetailsAt": 1763505778157
},
{
"username": "gabrielschulhof",
@@ -1352,7 +1352,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137784031
+ "~syncedDetailsAt": 1763505780226
},
{
"username": "hello2358",
@@ -1437,7 +1437,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137788992
+ "~syncedDetailsAt": 1763505798733
},
{
"username": "jamie855",
@@ -1491,7 +1491,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137784031
+ "~syncedDetailsAt": 1763505780226
},
{
"username": "jared_cheney.7rad60v",
@@ -1660,7 +1660,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137784031
+ "~syncedDetailsAt": 1763505780226
},
{
"username": "jordaneldredge",
@@ -1699,7 +1699,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137784031
+ "~syncedDetailsAt": 1763505780226
},
{
"username": "juancarlosjr97",
@@ -1916,7 +1916,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114079985
+ "~syncedDetailsAt": 1763505762536
},
{
"username": "ldebruijn",
@@ -1952,7 +1952,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114079985
+ "~syncedDetailsAt": 1763505762536
},
{
"username": "lee_byron.25krdom6",
@@ -2006,7 +2006,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137784031
+ "~syncedDetailsAt": 1763505780226
},
{
"username": "lyonwj1",
@@ -2055,7 +2055,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114079985
+ "~syncedDetailsAt": 1763505762536
},
{
"username": "mail1232",
@@ -2070,7 +2070,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137784031
+ "~syncedDetailsAt": 1763505780226
},
{
"username": "mansi.mittal",
@@ -2090,7 +2090,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137788992
+ "~syncedDetailsAt": 1763505798733
},
{
"username": "marco.reni",
@@ -2110,7 +2110,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137781378
+ "~syncedDetailsAt": 1763505778157
},
{
"username": "marion84",
@@ -2154,7 +2154,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758114079985
+ "~syncedDetailsAt": 1763505762536
},
{
"username": "martijn.walraven",
@@ -2170,7 +2170,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114079985
+ "~syncedDetailsAt": 1763505762536
},
{
"username": "martinbonnin42",
@@ -2185,7 +2185,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137788992
+ "~syncedDetailsAt": 1763505780226
},
{
"username": "marybriskin",
@@ -2240,7 +2240,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758137781378
+ "~syncedDetailsAt": 1763505778157
},
{
"username": "matteo.collina1",
@@ -2260,7 +2260,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137781378
+ "~syncedDetailsAt": 1763505778157
},
{
"username": "mauricio.montalvo.guzman",
@@ -2276,7 +2276,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114079985
+ "~syncedDetailsAt": 1763505762536
},
{
"username": "meenakshi.dhanani1",
@@ -2351,7 +2351,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114079985
+ "~syncedDetailsAt": 1763505762536
},
{
"username": "michael.astle",
@@ -2366,7 +2366,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137788992
+ "~syncedDetailsAt": 1763505780227
},
{
"username": "michael.bleigh",
@@ -2405,7 +2405,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137788992
+ "~syncedDetailsAt": 1763505780227
},
{
"username": "omribruchim",
@@ -2436,7 +2436,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114083720
+ "~syncedDetailsAt": 1763505775361
},
{
"username": "patrick.arminio",
@@ -2544,7 +2544,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758137781378
+ "~syncedDetailsAt": 1763505778157
},
{
"username": "rachit_sengupta",
@@ -2638,7 +2638,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137788992
+ "~syncedDetailsAt": 1763505798733
},
{
"username": "robert.balicki",
@@ -2664,7 +2664,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114083720
+ "~syncedDetailsAt": 1763505775361
},
{
"username": "robrichard87",
@@ -2680,7 +2680,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114083720
+ "~syncedDetailsAt": 1763505775361
},
{
"username": "ruben.cagnie",
@@ -2711,7 +2711,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114083720
+ "~syncedDetailsAt": 1763505775361
},
{
"username": "saihaj",
@@ -2726,7 +2726,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137788992
+ "~syncedDetailsAt": 1763505798733
},
{
"username": "saihajpreet.singh",
@@ -2765,7 +2765,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137788992
+ "~syncedDetailsAt": 1763505798733
},
{
"username": "sanvertarmur",
@@ -2780,7 +2780,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137788992
+ "~syncedDetailsAt": 1763505798733
},
{
"username": "sasanders26",
@@ -2801,7 +2801,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758137781378
+ "~syncedDetailsAt": 1763505778157
},
{
"username": "sasha177",
@@ -2964,7 +2964,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137781378
+ "~syncedDetailsAt": 1763505778157
},
{
"username": "spencer211",
@@ -3001,7 +3001,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114083720
+ "~syncedDetailsAt": 1763505775361
},
{
"username": "stefan239",
@@ -3046,7 +3046,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758551361502
+ "~syncedDetailsAt": 1763505798733
},
{
"username": "suresh_muthu",
@@ -3153,7 +3153,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758551361502
+ "~syncedDetailsAt": 1763505798734
},
{
"username": "tim.hall.engr",
@@ -3292,7 +3292,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758114083720
+ "~syncedDetailsAt": 1763505775361
},
{
"username": "vincent.desmares",
@@ -3327,7 +3327,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758114083720
+ "~syncedDetailsAt": 1763505775361
},
{
"username": "watson17",
@@ -3343,7 +3343,7 @@
2024,
2025
],
- "~syncedDetailsAt": 1758137781378
+ "~syncedDetailsAt": 1763505778157
},
{
"username": "x65han",
@@ -3358,7 +3358,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758551361502
+ "~syncedDetailsAt": 1763505798734
},
{
"username": "yaacovcr",
@@ -3442,7 +3442,7 @@
"_years": [
2025
],
- "~syncedDetailsAt": 1758137784031
+ "~syncedDetailsAt": 1763505780226
}
]
}
\ No newline at end of file
diff --git a/scripts/sync-working-groups/sync-working-groups.ts b/scripts/sync-working-groups/sync-working-groups.ts
index 1f66f70599..7756734ff3 100644
--- a/scripts/sync-working-groups/sync-working-groups.ts
+++ b/scripts/sync-working-groups/sync-working-groups.ts
@@ -45,8 +45,10 @@ export type WorkingGroupMeeting =
async function main() {
if (!API_KEY) {
- console.error("GOOGLE_CALENDAR_API_KEY is not set")
- process.exit(1)
+ console.warn(
+ "GOOGLE_CALENDAR_API_KEY is not set, skipping sync (using existing file)",
+ )
+ return
}
const now = new Date()
diff --git a/scripts/sync-working-groups/working-group-events.ndjson b/scripts/sync-working-groups/working-group-events.ndjson
index c792d551b3..cfbbde9d70 100644
--- a/scripts/sync-working-groups/working-group-events.ndjson
+++ b/scripts/sync-working-groups/working-group-events.ndjson
@@ -28,3 +28,6 @@
{"kind":"calendar#event","etag":"\"3512629578532638\"","id":"1ae8m39lvqtigc4ao1p670g8il_20251211T160000Z","status":"confirmed","htmlLink":"https://www.google.com/calendar/event?eid=MWFlOG0zOWx2cXRpZ2M0YW8xcDY3MGc4aWxfMjAyNTEyMTFUMTYwMDAwWiBsaW51eGZvdW5kYXRpb24ub3JnX2lrNzl0OXV1ajJwMzJpM3IyMDNkZ3Y1bW84QGc","created":"2025-02-04T14:14:16.000Z","updated":"2025-08-27T17:13:09.266Z","summary":"GraphQL Community WG","description":"Meeting password: community
https://github.com/graphql/community-wg/tree/main/agendas
Please be aware that meetings are recorded and/or live-streamed.","location":"https://zoom.us/j/93104287544","creator":{"email":"benjie@graphile.com"},"organizer":{"email":"linuxfoundation.org_ik79t9uuj2p32i3r203dgv5mo8@group.calendar.google.com","displayName":"GraphQL Foundation - Public","self":true},"start":"2025-12-11T11:00:00-05:00","end":"2025-12-11T12:00:00-05:00","recurringEventId":"1ae8m39lvqtigc4ao1p670g8il_R20250313T150000","originalStartTime":{"dateTime":"2025-12-11T11:00:00-05:00","timeZone":"America/Los_Angeles"},"iCalUID":"1ae8m39lvqtigc4ao1p670g8il_R20250313T150000@google.com","sequence":1,"eventType":"default"}
{"kind":"calendar#event","etag":"\"3462003293658000\"","id":"lvqspfdh491rrdmvl7k1mruqd8_20251211T170000Z","status":"confirmed","htmlLink":"https://www.google.com/calendar/event?eid=bHZxc3BmZGg0OTFycmRtdmw3azFtcnVxZDhfMjAyNTEyMTFUMTcwMDAwWiBsaW51eGZvdW5kYXRpb24ub3JnX2lrNzl0OXV1ajJwMzJpM3IyMDNkZ3Y1bW84QGc","created":"2024-01-12T09:56:35.000Z","updated":"2024-11-07T17:47:26.829Z","summary":"Composite schemas WG - Weekly 2","description":"The weekly "secondary" meeting of the composite schemas WG: https://github.com/graphql/composite-schemas-wg
Meeting password is "composite"
Live notes are at https://docs.google.com/document/d/1hJO6U7daYvcNcQ3FBKnh3v4R256ers6M8IGyqRpY_kE/edit?usp=sharing","location":"https://zoom.us/j/91078840351","creator":{"email":"benjie@graphile.com"},"organizer":{"email":"linuxfoundation.org_ik79t9uuj2p32i3r203dgv5mo8@group.calendar.google.com","displayName":"GraphQL Foundation - Public","self":true},"start":"2025-12-11T12:00:00-05:00","end":"2025-12-11T13:00:00-05:00","recurringEventId":"lvqspfdh491rrdmvl7k1mruqd8","originalStartTime":{"dateTime":"2025-12-11T12:00:00-05:00","timeZone":"Europe/Berlin"},"iCalUID":"lvqspfdh491rrdmvl7k1mruqd8@google.com","sequence":1,"eventType":"default"}
{"kind":"calendar#event","etag":"\"3524923696926750\"","id":"56uko3hh68be4q73tttdicg7l2_20251225T183000Z","status":"confirmed","htmlLink":"https://www.google.com/calendar/event?eid=NTZ1a28zaGg2OGJlNHE3M3R0dGRpY2c3bDJfMjAyNTEyMjVUMTgzMDAwWiBsaW51eGZvdW5kYXRpb24ub3JnX2lrNzl0OXV1ajJwMzJpM3IyMDNkZ3Y1bW84QGc","created":"2025-10-16T15:10:58.000Z","updated":"2025-11-06T20:44:08.463Z","summary":"GraphQL AI Working Group","description":"Sign up and view agenda at https://github.com/graphql/ai-wg
Zoom password: aiwg","location":"https://zoom.us/j/92302442188","creator":{"email":"benjie@graphile.com"},"organizer":{"email":"linuxfoundation.org_ik79t9uuj2p32i3r203dgv5mo8@group.calendar.google.com","displayName":"GraphQL Foundation - Public","self":true},"start":"2025-12-11T13:30:00-05:00","end":"2025-12-11T14:30:00-05:00","recurringEventId":"56uko3hh68be4q73tttdicg7l2","originalStartTime":{"dateTime":"2025-12-25T13:30:00-05:00","timeZone":"America/New_York"},"transparency":"transparent","iCalUID":"56uko3hh68be4q73tttdicg7l2@google.com","sequence":1,"eventType":"default"}
+{"kind":"calendar#event","etag":"\"3516415120288286\"","id":"h9erafl4rc1jjor9i6akokm5ec_20251218T160000Z","status":"confirmed","htmlLink":"https://www.google.com/calendar/event?eid=aDllcmFmbDRyYzFqam9yOWk2YWtva201ZWNfMjAyNTEyMThUMTYwMDAwWiBsaW51eGZvdW5kYXRpb24ub3JnX2lrNzl0OXV1ajJwMzJpM3IyMDNkZ3Y1bW84QGc","created":"2023-12-08T21:32:03.000Z","updated":"2025-09-18T14:59:20.144Z","summary":"GraphQL Governing Board Meeting","creator":{"email":"jburson@linuxfoundation.org"},"organizer":{"email":"linuxfoundation.org_ik79t9uuj2p32i3r203dgv5mo8@group.calendar.google.com","displayName":"GraphQL Foundation - Public","self":true},"start":"2025-12-18T11:00:00-05:00","end":"2025-12-18T12:00:00-05:00","recurringEventId":"h9erafl4rc1jjor9i6akokm5ec","originalStartTime":{"dateTime":"2025-12-18T11:00:00-05:00","timeZone":"America/New_York"},"iCalUID":"h9erafl4rc1jjor9i6akokm5ec@google.com","sequence":3,"eventType":"default"}
+{"kind":"calendar#event","etag":"\"3462003372886000\"","id":"kkc5tt01ovrjv8fki1lo31g5hj_20251218T170000Z","status":"confirmed","htmlLink":"https://www.google.com/calendar/event?eid=a2tjNXR0MDFvdnJqdjhma2kxbG8zMWc1aGpfMjAyNTEyMThUMTcwMDAwWiBsaW51eGZvdW5kYXRpb24ub3JnX2lrNzl0OXV1ajJwMzJpM3IyMDNkZ3Y1bW84QGc","created":"2024-01-12T09:55:37.000Z","updated":"2024-11-07T17:48:06.443Z","summary":"Composite schemas WG - Weekly 3","description":"The weekly \"secondary\" meeting of the composite schemas WG: https://github.com/graphql/composite-schemas-wg
Meeting password is \"composite\"
Live notes are at https://docs.google.com/document/d/1hJO6U7daYvcNcQ3FBKnh3v4R256ers6M8IGyqRpY_kE/edit?usp=sharing","location":"https://zoom.us/j/91078840351","creator":{"email":"benjie@graphile.com"},"organizer":{"email":"linuxfoundation.org_ik79t9uuj2p32i3r203dgv5mo8@group.calendar.google.com","displayName":"GraphQL Foundation - Public","self":true},"start":"2025-12-18T12:00:00-05:00","end":"2025-12-18T13:00:00-05:00","recurringEventId":"kkc5tt01ovrjv8fki1lo31g5hj","originalStartTime":{"dateTime":"2025-12-18T12:00:00-05:00","timeZone":"Europe/Berlin"},"iCalUID":"kkc5tt01ovrjv8fki1lo31g5hj@google.com","sequence":1,"eventType":"default"}
+{"kind":"calendar#event","etag":"\"3500694996844990\"","id":"2ffd8o32sh77kd3mtccrtg887n_20251218T183000Z","status":"confirmed","htmlLink":"https://www.google.com/calendar/event?eid=MmZmZDhvMzJzaDc3a2QzbXRjY3J0Zzg4N25fMjAyNTEyMThUMTgzMDAwWiBsaW51eGZvdW5kYXRpb24ub3JnX2lrNzl0OXV1ajJwMzJpM3IyMDNkZ3Y1bW84QGc","created":"2025-05-01T19:23:48.000Z","updated":"2025-06-19T15:38:18.422Z","summary":"GraphQL WG - Secondary (EU)","description":"Zoom password: graphqlwg","location":"https://zoom.us/j/593263740","creator":{"email":"benjie@graphile.com"},"organizer":{"email":"linuxfoundation.org_ik79t9uuj2p32i3r203dgv5mo8@group.calendar.google.com","displayName":"GraphQL Foundation - Public","self":true},"start":"2025-12-18T13:30:00-05:00","end":"2025-12-18T15:00:00-05:00","recurringEventId":"2ffd8o32sh77kd3mtccrtg887n","originalStartTime":{"dateTime":"2025-12-18T13:30:00-05:00","timeZone":"America/Los_Angeles"},"iCalUID":"2ffd8o32sh77kd3mtccrtg887n@google.com","sequence":0,"eventType":"default"}
diff --git a/src/app/(main)/community/events/events-list.tsx b/src/app/(main)/community/events/events-list.tsx
index 824b251344..6362ccd9e7 100644
--- a/src/app/(main)/community/events/events-list.tsx
+++ b/src/app/(main)/community/events/events-list.tsx
@@ -77,7 +77,7 @@ export function EventsList({
const tags: Set = new Set()
events.forEach(event => {
if ("start" in event) tags.add("working-group")
- if ("node" in event) tags.add("meetup")
+ else if ("node" in event) tags.add("meetup")
else tags.add("conference")
})
diff --git a/src/app/(main)/community/events/feed.xml/route.tsx b/src/app/(main)/community/events/feed.xml/route.tsx
index dd0750cc93..2ab639a1e3 100644
--- a/src/app/(main)/community/events/feed.xml/route.tsx
+++ b/src/app/(main)/community/events/feed.xml/route.tsx
@@ -3,7 +3,6 @@ import RSS from "rss"
import { getAllEvents } from "../get-all-events"
export const dynamic = "force-static"
-export const config = { runtime: "edge" }
export async function GET() {
const { upcomingEvents, pastEvents } = await getAllEvents()
diff --git a/test/e2e/community-events.spec.ts b/test/e2e/community-events.spec.ts
index 782d26b992..e3c536d415 100644
--- a/test/e2e/community-events.spec.ts
+++ b/test/e2e/community-events.spec.ts
@@ -1,11 +1,8 @@
import { test, expect, type Locator } from "@playwright/test"
-test.beforeEach(async ({ page }) => {
- await page.goto("/community/events")
-})
-
test("Zurich meetup link works", async ({ page }) => {
if (process.env.CI) test.skip()
+ await page.goto("/community/events")
const link = page.getByRole("link", { name: /Zurich/i }).first()
await link.scrollIntoViewIfNeeded()
@@ -22,6 +19,7 @@ test("Zurich meetup link works", async ({ page }) => {
test("map matches screenshot", async ({ page }) => {
if (process.env.CI) test.skip()
+ await page.goto("/community/events")
const mapContainer = page.locator("#meetups-map").first()
await mapContainer.scrollIntoViewIfNeeded()
@@ -49,6 +47,7 @@ test("map matches screenshot", async ({ page }) => {
test("map tooltip appears on marker hover", async ({ page }) => {
if (process.env.CI) test.skip()
+ await page.goto("/community/events")
const mapContainer = page.locator("#meetups-map").first()
await mapContainer.scrollIntoViewIfNeeded()
@@ -142,6 +141,7 @@ test("map tooltip appears on marker hover", async ({ page }) => {
test("event type filters hide cards and lock the last active tag", async ({
page,
}) => {
+ await page.goto("/community/events")
const pastEventsSection = page
.locator("section")
.filter({
@@ -154,65 +154,28 @@ test("event type filters hide cards and lock the last active tag", async ({
await pastEventsSection.scrollIntoViewIfNeeded()
- const filterGroup = pastEventsSection.getByRole("group", {
- name: "Event type",
- })
- const conferenceFilter = filterGroup.getByRole("checkbox", {
- name: /conference/i,
- })
- const meetupFilter = filterGroup.getByRole("checkbox", { name: /meetup/i })
- const workingGroupFilter = filterGroup.getByRole("checkbox", {
- name: /working group/i,
- })
- const conferenceChip = filterGroup
- .locator("label")
- .filter({ hasText: /conference/i })
- .first()
- const meetupChip = filterGroup
- .locator("label")
- .filter({ hasText: /meetup/i })
- .first()
- const workingGroupChip = filterGroup
- .locator("label")
- .filter({ hasText: /working group/i })
- .first()
+ const filterGroup = pastEventsSection.locator("fieldset")
+
+ const activeFilters: { filter: Locator; chip: Locator; badges: Locator }[] =
+ []
+
+ for (const kind of ["conference", "meetup", "working group"]) {
+ const filter = filterGroup.getByRole("checkbox", {
+ name: new RegExp(kind, "i"),
+ })
- const tagBadge = (tag: RegExp) =>
- pastEventsSection.locator("a span:has(.Tag--bg)").filter({ hasText: tag })
-
- const filterDefinitions = [
- {
- kind: "conference",
- filterName: /conference/i,
- badgeText: /^conference$/i,
- chip: conferenceChip,
- filter: conferenceFilter,
- },
- {
- kind: "meetup",
- filterName: /meetup/i,
- badgeText: /^meetup$/i,
- chip: meetupChip,
- filter: meetupFilter,
- },
- {
- kind: "working group",
- filterName: /working group/i,
- badgeText: /^working group$/i,
- chip: workingGroupChip,
- filter: workingGroupFilter,
- },
- ] as const
-
- type FilterDefinition = (typeof filterDefinitions)[number]
- type ActiveFilter = FilterDefinition & { badges: Locator }
-
- const activeFilters: ActiveFilter[] = []
-
- for (const definition of filterDefinitions) {
- const badgeLocator = tagBadge(definition.badgeText)
- if ((await definition.filter.count()) === 0) continue
- activeFilters.push({ ...definition, badges: badgeLocator })
+ if ((await filter.count()) === 0) continue
+
+ activeFilters.push({
+ filter,
+ chip: filterGroup
+ .locator("label")
+ .filter({ hasText: new RegExp(kind, "i") })
+ .first(),
+ badges: pastEventsSection
+ .locator("a span:has(.Tag--bg)")
+ .filter({ hasText: new RegExp(`^${kind}$`, "i") }),
+ })
}
expect(activeFilters.length).toBeGreaterThan(0)
@@ -253,6 +216,7 @@ test("event type filters hide cards and lock the last active tag", async ({
test("upcoming and past sections only show events on the correct side of now", async ({
page,
}) => {
+ await page.goto("/community/events")
const upcomingSection = page
.locator("section")
.filter({
@@ -276,49 +240,46 @@ test("upcoming and past sections only show events on the correct side of now", a
const now = Date.now()
- const readSectionDates = async (section: Locator) => {
- const entries = await section.locator("a time").evaluateAll(elements =>
+ const validateSectionDates = async (
+ section: Locator,
+ predicate: (timestamp: number) => boolean,
+ errorMessage: string,
+ ) => {
+ const dates = await section.locator("a time").evaluateAll(elements =>
elements.map(element => ({
iso: element.getAttribute("datetime") ?? "",
text: element.textContent?.trim() ?? "",
})),
)
- return entries
+
+ expect(dates.length).toBeGreaterThan(0)
+
+ for (const { iso, text } of dates) {
+ expect(
+ iso.length,
+ `${text} is missing a datetime attribute`,
+ ).toBeGreaterThan(0)
+ const timestamp = Date.parse(iso)
+ expect(
+ Number.isNaN(timestamp),
+ `${text} carries an invalid datetime attribute: ${iso}`,
+ ).toBe(false)
+ expect(
+ predicate(timestamp),
+ `${text} ${errorMessage} but resolved to ${iso}`,
+ ).toBe(true)
+ }
}
- const upcomingDates = await readSectionDates(upcomingSection)
- expect(upcomingDates.length).toBeGreaterThan(0)
- upcomingDates.forEach(({ iso, text }) => {
- expect(
- iso.length,
- `${text} is missing a datetime attribute`,
- ).toBeGreaterThan(0)
- const timestamp = Date.parse(iso)
- expect(
- Number.isNaN(timestamp),
- `${text} carries an invalid datetime attribute: ${iso}`,
- ).toBe(false)
- expect(
- timestamp,
- `${text} should be in the future but resolved to ${iso}`,
- ).toBeGreaterThanOrEqual(now)
- })
+ await validateSectionDates(
+ upcomingSection,
+ ts => ts >= now,
+ "should be in the future",
+ )
- const pastDates = await readSectionDates(pastEventsSection)
- expect(pastDates.length).toBeGreaterThan(0)
- pastDates.forEach(({ iso, text }) => {
- expect(
- iso.length,
- `${text} is missing a datetime attribute`,
- ).toBeGreaterThan(0)
- const timestamp = Date.parse(iso)
- expect(
- Number.isNaN(timestamp),
- `${text} carries an invalid datetime attribute: ${iso}`,
- ).toBe(false)
- expect(
- timestamp,
- `${text} should be in the past but resolved to ${iso}`,
- ).toBeLessThan(now)
- })
+ await validateSectionDates(
+ pastEventsSection,
+ ts => ts < now,
+ "should be in the past",
+ )
})