← devrescue

We scanned the CI of 139 popular JS/TS repos

Analyzed 2026-11-02 with the same engine that powers the free audit.

Results

Repos with pull-request workflows and no concurrency group97 of 129 (75.2%)
CI jobs without timeout-minutes1,329 of 2,181 (60.9%)
Repos with at least one job without a timeout131 of 139 (94.2%)
Repos installing dependencies without cache in at least one CI workflow41 of 121 (33.9%)
Repos clean on all three checks1 of 139
Median CI/CD Health Score84/100

Method

Raw data

Sorted by CI/CD score, lowest first. Scores reflect these three checks only, not the overall quality of a project.

RepoCI/CDNo cacheNo concurrencyJobs w/o timeout
apollographql/apollo-client46yesyes21 / 21
clauderic/dnd-kit46yesyes9 / 9
bvaughn/react-window46yesyes6 / 6
eigent-ai/eigent56yesyes9 / 17
C4illin/ConvertX58yes—8 / 8
verdaccio/verdaccio58yes—20 / 27
vercel/vercel58yes—31 / 46
electerm/electerm58yes—33 / 33
mswjs/msw60yesyes10 / 10
GoogleChrome/chrome-extensions-samples60yesyes5 / 5
infernojs/inferno60yesyes5 / 6
you-dont-need/You-Dont-Need-Lodash-Underscore64yesyes3 / 3
resend/react-email66yesyes0 / 11
ether/etherpad66yesyes38 / 41
redis/node-redis66yesyes12 / 12
apitable/apitable66yesyes5 / 10
sweetalert2/sweetalert266yes—1 / 4
alam00000/bentopdf66yesyes17 / 17
CesiumGS/cesium68yes—15 / 15
mlc-ai/web-llm70yesyes3 / 7
bluesky-social/social-app70yesyes36 / 39
sindresorhus/type-fest70yesyes5 / 5
Anionex/banana-slides70yesyes12 / 22
OptimalBits/bull70yesyes3 / 3
lyswhut/lx-music-mobile74yesyes5 / 5
subquery/subql74yesyes15 / 16
tusen-ai/naive-ui74yesyes4 / 4
lidge-jun/opencodex74yesyes14 / 57
hydralauncher/hydra74yesyes10 / 10
sass/sass74yesyes10 / 10
mdx-js/mdx74yesyes4 / 4
mjmlio/mjml74yesyes4 / 4
compiler-explorer/compiler-explorer76—yes15 / 15
unocss/unocss76—yes3 / 6
conventional-changelog/commitlint76—yes8 / 8
oblador/react-native-vector-icons76—yes8 / 10
leon-ai/leon76—yes3 / 5
ag-ui-protocol/ag-ui76—yes56 / 73
signalapp/Signal-Desktop76—yes7 / 20
typescript-eslint/typescript-eslint76—yes31 / 31
react-native-maps/react-native-maps76—yes6 / 6
Koenkk/zigbee2mqtt76—yes10 / 10
ag-grid/ag-grid76—yes40 / 78
open-metadata/OpenMetadata76—yes64 / 125
web-infra-dev/midscene76—yes12 / 27
jupyterlab/jupyterlab76—yes24 / 43
Chocobozzz/PeerTube76—yes8 / 8
cure53/DOMPurify76—yes10 / 10
gpujs/gpu.js76yesyes0 / 2
elysiajs/elysia78yesyes2 / 2
vitest-dev/vitest78yes—15 / 28
lottie-react-native/lottie-react-native78yes—6 / 6
satnaing/shadcn-admin78yesyes2 / 2
remarkjs/react-markdown78yesyes2 / 2
jasmine/jasmine78yesyes2 / 2
danielmiessler/LifeOS80—yes4 / 4
genlayerlabs/genlayer-project-boilerplate80—yes5 / 5
anthropics/claude-quickstarts80—yes5 / 5
langchain-ai/langchainjs80—yes34 / 34
tradingview/lightweight-charts80—yes4 / 8
triggerdotdev/trigger.dev80—yes48 / 54
udecode/plate80—yes13 / 19
scalar/scalar80—yes2 / 70
Vincentwei1021/video-shotcraft80—yes7 / 8
rjsf-team/react-jsonschema-form80—yes10 / 11
yc-software/qm80—yes14 / 21
sindresorhus/ky82yes—2 / 2
mountain-loop/yaak84—yes11 / 12
reduxjs/reselect84—yes7 / 7
eggjs/egg84—yes11 / 13
rowboatlabs/rowboat84—yes6 / 6
Foundry376/Mailspring84—yes13 / 14
langchain-ai/openwiki84—yes8 / 8
ionic-team/capacitor84—yes3 / 18
carloscuesta/gitmoji84—yes3 / 3
umijs/qiankun84—yes14 / 19
omnivore-app/omnivore84—yes5 / 5
VERT-sh/VERT84—yes3 / 3
adobe/react-spectrum84—yes10 / 10
YishenTu/claudian84—yes5 / 24
Termix-SSH/Termix84—yes24 / 25
hicccc77/WeFlow84—yes8 / 8
miuuyy/codex-chatgpt-web84—yes4 / 4
decaporg/decap-cms84—yes7 / 8
handlebars-lang/handlebars.js84—yes5 / 5
youzan/vant-weapp84—yes6 / 6
enyo/dropzone84—yes6 / 6
pinojs/pino84—yes8 / 8
emotion-js/emotion84—yes8 / 8
JedWatson/classnames84—yes4 / 4
apache/pouchdb84—yes11 / 11
dataelement/dsh-desktop84—yes7 / 11
less/less.js84—yes5 / 5
huggingface/transformers.js84—yes3 / 3
jsdoc/jsdoc84—yes3 / 3
NodeBB/NodeBB84—yes4 / 4
teambit/bit86yesyes0 / 3
elizaOS/eliza88——14 / 195
radix-ui/primitives88——7 / 9
adonisjs/core88——5 / 5
vercel-labs/json-render88——5 / 8
nukeop/nuclear88——17 / 17
wasp-lang/wasp88——29 / 30
vuejs/vitepress88——6 / 6
nodemailer/nodemailer88——5 / 5
redwoodjs/graphql88——3 / 3
video-dev/hls.js88——11 / 11
a2ui-project/a2ui88——28 / 40
graphql/graphiql88——16 / 16
diegomura/react-pdf88——6 / 6
zhaoolee/ChineseBQB88——4 / 4
javascript-obfuscator/javascript-obfuscator88—yes2 / 2
electric-sql/pglite88——5 / 6
GLips/Figma-Context-MCP88—yes2 / 2
umijs/umi88——14 / 16
faker-js/faker88—yes0 / 15
amark/gun88——3 / 3
plotly/plotly.js88——34 / 35
JoeanAmier/TikTokDownloader88——7 / 7
playcanvas/engine88——6 / 15
hubotio/hubot88——9 / 9
zotero/zotero88——3 / 6
Fei-Away/Codex-Dream-Skin88——8 / 9
foambubble/foam92—yes1 / 11
tinymce/tinymce92—yes1 / 1
ParadevAI/Paradev92—yes0 / 49
documenso/documenso92—yes0 / 16
forwardemail/superagent92—yes1 / 1
librespeed/speedtest92——2 / 4
ahmedkhaleel2004/gitdiagram96——1 / 6
Effect-TS/effect96——1 / 18
rmyndharis/OpenWA96—yes0 / 42
DuarteSantos8/openGym96——1 / 22
hemanth/functional-programming-jargon96——1 / 1
liabru/matter-js96——1 / 1
commitizen/cz-cli96——1 / 1
YuJunZhiXue/dsh-purge96——1 / 1
maillab/cloud-mail96——1 / 1
corsairdev/corsair100——0 / 15

Run the same audit on your repo →