cdnjs opustil Google Cloud. Jeho repozitář na GitHubu stojí od loňského září
Veřejná CDN pro knihovny JavaScriptu jede podle Cloudflare od 23. června výhradně na jeho vlastní vývojářské platformě. Publikační linka odešla z Google Cloudu a zdrojem pravdy je místo repozitáře na GitHubu objektové úložiště R2. Ten repozitář mezitím vyrostl tak, že z něj GitHub odmítá vyrobit archiv ke stažení, a poslední commit v něm je z 30. září 2025.
Řádek <script src="https://cdnjs.cloudflare.com/…"> najdete ve starých návodech, v odpovědích na Stack Overflow i v ukázkách, které vysype jazykový model. Vede na cdnjs, veřejné zrcadlo otevřených knihoven pro JavaScript a CSS: bez registrace, bez klíče, bez omezení tempa. Cloudflare 30. července popsal na svém blogu, jak službu přestěhoval na vlastní vývojářskou platformu, a uvedl, že od 23. června 2026 na ní cdnjs běží výhradně.

Čísla se podle zdroje liší
Cloudflare uvádí průměrných 108 000 požadavků za sekundu, tedy 9 miliard denně, obsluhu z více než 330 datových center a 98,6 % odbavených z vyrovnávací paměti. Web projektu cdnjs.com přitom mluví o „více než 200 miliardách požadavků měsíčně“, což vychází na necelých 6,7 miliardy denně. Údaj na webu je psaný jako spodní hranice a nenese datum, takže si nutně neodporují – jen se nedá říct, které platí dnes.
Stejná nejistota je u rozšířenosti. Cloudflare píše o zhruba 12 % všech webů a 48,3% podílu mezi CDN pro JavaScript. Druhé číslo přesně sedí s tím, co má za červenec 2026 přehled W3Techs; tentýž přehled ale u podílu na všech webech uvádí 11,6 % a cdnjs.com tvrdí „přes 12,5 %“. Odkud čísla bere, Cloudflare ve svém článku neříká.
Rozdělená služba
Servírování souborů odešlo na Workers a úložiště klíč-hodnota KV už v roce 2020. Publikační linka – tedy to, co hlídá npm a GitHub, stahuje nová vydání knihoven a zpracovává je – zůstala na Google Cloud Platform. Byl to řetěz malých funkcí Cloud Functions, virtuální stroj s nástrojem git-sync a repozitář na GitHubu v roli zdroje pravdy.
Cloudflare popisuje pět bolavých míst; čtyři z nich jsou v lince. Nejvíc prý pálila chybějící společná stopa: jeden balíček procházel funkcemi Googlu, frontou Pub/Sub, virtuálním strojem a teprve pak KV, a žádný z nich nesdílel identifikátor, přes který by se protokoly daly spojit. Selhání to nezpůsobovalo. Způsobovalo to částečný úspěch – verze, která se zapsala do KV a pak tiše nedorazila do repozitáře, se týdny servírovala správně, jen se obě úložiště rozcházela a nikdo o tom nevěděl.
Zbylé body jsou z téhož soudku. Soubory ležely na dvou místech a ani jedno nebylo autoritativní. Linka byla slepená přes události nad úložištěm, které tak dělalo frontu, jenže bez fronty nedoručených zpráv. A kontrola novinek na npm potřebovala 26 funkcí, po jedné na každé písmeno abecedy, každou s vlastním nasazením a vlastním protokolem.
Repozitář, ze kterého GitHub neudělá archiv
Nejlíp to je vidět na repozitáři. Cloudflare píše, že cdnjs/cdnjs přerostl 1,1 TB zabalených dat, což je nad možnosti archivační služby GitHubu: tarball ani zip z něj vyrobit nejde. Adresa codeload.github.com/cdnjs/cdnjs/zip/refs/heads/master vrací 31. července 2026 stavový kód 422, tedy odmítnutí, a stejně dopadne i varianta s tar.gz.
Sedí i druhá podrobnost. Soubor .gitignore, kterým se linka bránila rozbitým a podivně očíslovaným vydáním, má dnes 295 řádků. Z nich 275 začíná cestou /ajax/libs/ a jeden z těch řádků je vzor pro značku robota, takže ručně zablokovaných složek je 274 – přesně tolik, kolik Cloudflare uvádí.
Jedna věc ale v článku chybí. Poslední commit v repozitáři je z 30. září 2025, 9:10 UTC, a jmenuje se „update last sync marker“. Zrcadlení se tedy zastavilo devět měsíců předtím, než migrace skončila, a co se v mezidobí dělo, se z textu nedozvíte. Repozitář zůstává otevřený, ne archivovaný.
Jak to běží teď
Zdrojem pravdy je objektové úložiště R2. Nemá praktický strop na velikost, takže se do něj vešly i soubory, které se do KV nevešly – mapy zdrojového kódu, velké svazky, balíky s písmy. Přístup přes rozhraní S3 znamená, že se katalog dá číst běžným klientem; kdo si chce postavit vlastní zrcadlo, má podle Cloudflare založit hlášení v repozitáři a dostane přístupové údaje jen pro čtení. V KV zůstala metadata: informace o balíčcích, seznamy verzí a otisky SRI, tedy kontrolní součty, kterými si prohlížeč ověřuje, že mu CDN vydala přesně ten soubor, jaký autor stránky čekal.
Obsah se navíc zrcadlí do úložiště Spaces u DigitalOceanu, který cdnjs dlouhodobě sponzoruje. Není to jen záloha pro případ havárie: servírovací Worker si tam sáhne pokaždé, když R2 soubor nevydá. Řetěz je vyrovnávací paměť, pak R2, pak DigitalOcean. Zatím v něm zůstává i původ hostovaný u Cloudflare, dokud se do R2 nedoplní zbytek obsahu z GitHubu.
Publikační linku řídí Workflows. Každých deset minut ji nastartuje plánovaná úloha, která se ptá npm a GitHubu na nové verze; pro každou spustí stažení archivu do R2 a pro každý soubor zvlášť zpracování, tedy rozbalení, minifikaci a kompresi. Poslední krok zapíše výsledek do R2 a KV a doplní vyhledávací index Algolia.
Komprese běží jako služba v Rustu v kontejneru vedle: algoritmy potřebují celou knihovnu v paměti naráz, což Worker neunese, a přepis na proudové zpracování teprve čeká.
Napoprvé se migrace musela vrátit
Přesun obsahu měl dřívější, neúspěšný pokus. Tehdy chtěl Cloudflare stará vydání znovu zpracovat a zapsat rovnou do R2, jenže minifikátory a kompresory nedávají mezi verzemi bajtově shodný výstup. Nové soubory byly správné, ale měly jiné otisky SRI, a kdo si otisk zapsal do stránky, tomu by se knihovna přestala načítat. Pokus se vrátil zpátky a napodruhé se obsah z KV do R2 kopíroval tak, jak byl.
Tím se úloha změnila na „přesunout miliony souborů mezi účty a žádný neztratit“ a narazila na strop tisíce podřízených požadavků na jedno spuštění Workeru. Práci proto rozsekali podle jména balíčku a rozehnali přes fronty, které ručí za doručení alespoň jednou. Oba stropy, na které při tom narazili – tisíc podřízených požadavků a 1 024 kroků na jeden workflow –, si nechali od vlastních týmů zvednout.
Tady se vyplatí být přesný, protože blog je volnější než dokumentace. Cloudflare píše, že podřízených požadavků je teď „až deset milionů“ na placených tarifech. Dokumentace Workers, naposledy aktualizovaná 28. července 2026, uvádí ve výchozím stavu 10 000 na jedno spuštění; deset milionů je strop, na který si limit smíte zvednout v nastavení nástroje Wrangler. U workflow to sedí bez výhrad – dokumentace Workflows uvádí výchozích 10 000 kroků a možnost jít na 25 000.
Co zůstává otevřené
Cloudflare sám přiznává, že otisky SRI uložené ze staré linky nemusí kvůli jejím chybám odpovídat skutečnosti a že se to teprve rovná. U služby, jejíž hlavní argument je neměnný a otiskem ověřený obsah, je to ta podstatná výhrada.
Bez čísla nechává Cloudflare i tvrzení, že po cdnjs sahají jazykové modely, protože je jich plná trénovací data. Zní věrohodně a z článku se ověřit nedá.
Změnila se ještě jedna věc, kterou blog nepojmenovává. Zdrojem pravdy byl veřejný repozitář, který si mohl kdokoli naklonovat – byť poslední roky těžko. Dnes je jím úložiště, jehož obsah se dá číst běžným klientem S3, ale vlastní zrcadlo si zřídíte až po domluvě. Katalog knihoven zůstává otevřený a zadarmo; kopie celé sbírky je nově na pozvání.
Zdroje: článek Dogfooding at scale na blogu Cloudflare, údaje o repozitáři cdnjs/cdnjs z API GitHubu, soubor .gitignore v témž repozitáři, statistika W3Techs za červenec 2026 a popis nastavení limits v konfiguraci Wrangleru.