TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南
TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南

1k GitHub Stars 把 60,524 個千星 GitHub 儲存庫畫成一張互動樹狀圖,並在資料層把 awesome 清單文拆到獨立分頁;本文拆解它的每日快照架構、反炒作的 Daily Trending 門檻,以及三次更換網域的歷史與正確入口。
用 AI 摘要這篇文章:
想在 GitHub 上看出「現在什麼技術在動」,星數是最直覺的訊號,但它有兩個先天雜訊:你看到的熱門永遠是過去式;而且高星榜裡有一大塊根本不是軟體,而是 awesome 清單、學習路線圖、面試題庫這類整理出來的「內容」。把一個文字編輯器和一份「免費程式教學大全」放在同一張榜上比星數,比不出什麼工程結論。
開源工具 1k GitHub Stars 用一個有企圖心的做法同時處理這兩件事:它把星數超過 1,000 的 60,524 個儲存庫畫成一張互動樹狀圖(treemap),方塊面積代表星數、顏色代表程式語言,點任何語言方塊可以鑽進單一語言的子地圖;同時它在資料層動手,把清單類的儲存庫整批拆到獨立的 Awesome 分頁,主地圖留給真正在寫軟體的專案。
先把容易誤會的地方講清楚:它稱不上即時。資料每天批次更新一次,頁面上也自己標著資料截止時間。把它當「每天刷新一次的星數全景快照」來用,比把它當即時排行榜有用得多。這篇文章會講清楚它的兩個編輯判斷怎麼運作、資料實際上多新,以及這個專案換過三次門牌的來龍去脈。它在中文圈的舊介紹文裡原本叫「GitHub Star Tracker」,那是 2025 年初版的名字,現在的官方名稱是 1k GitHub Stars,兩個名字指的是同一個儲存庫。
打開官網 github-treemap.pages.dev,整張地圖一次展開:最大的方塊是 build-your-own-x(548,422 星),接著是 public-apis、freeCodeCamp(455,840 星,地圖上最大的「真軟體」方塊)這些長年霸榜的名字,星數分層從最低的「1k–2k」一路切到「100k+」,共七層。網站標題寫得很直白:GitHub Treemap,60k+ Repos。

這個數字不是行銷話術。我把專案 data 目錄裡的 repos.json 整份下載,用程式點算是 60,524 筆,欄位只有八個:全名、星數、fork 數、語言、描述、單日增量、建立時間、更新時間。收錄門檻就是名稱裡那個 1k:資料集中星數最低的一批(約第 99 百分位)落在 1,018 星上下,與門檻吻合;整份資料的中位數是 2,124 星,也就是說地圖上一半的方塊都在千星到兩千星之間,真正的大方塊是金字塔頂端的少數。
架構上有個值得工程師留意的地方:它是 Next.js 靜態匯出(static export),整個網站沒有後端。首頁的 HTML 檔案超過 10 MB,因為 60,524 筆資料全部內嵌在頁面裡;我在原始碼裡搜尋對外請求,找不到任何打向 GitHub API 或分析服務的呼叫,出現 fetch 字樣的幾處全是某些儲存庫的描述文字。也就是說,你在上面搜尋、切換語言、看增量,全部都是瀏覽器對著頁面裡既有資料運算,不會再發任何請求出去。
連滑鼠停留時顯示的建立時間、更新時間,也是預先做好的靜態索引檔,而不是滑鼠每停一次就去找 API 查一輪。整個專案的執行期依賴只有三個:Next.js、React、React DOM,樹狀圖的佈局演算法(squarify)是作者自己寫的,不是再掛一套圖表庫。6 萬個方塊在瀏覽器裡還能順滑縮放,靠的就是把資料和演算法都壓到最精簡。
網站地圖(sitemap)列了 264 個網址:首頁、每日趨勢、Awesome 分頁,加上 261 個語言子頁。語言子頁按資料集裡的 262 種語言生成,從 Python(子頁收錄 10,088 個專案)、JavaScript、TypeScript 這些大類,到 COBOL、GAMS 這種極小眾語言都有專屬頁面,子頁的麵包屑會標明目前所在的語言與收錄數。介面只有英文,沒有中文,操作上不難,但搜尋時要用英文關鍵字。

這個工具常被介紹成「即時追蹤熱門開源專案」,但往資料層看,它是道地的快照式架構。
更新流程是這樣的:GitHub Actions 排程每天 UTC 01:00 啟動一個工作流,腳本把 60,524 個儲存庫逐批送到 GitHub 的 GraphQL API 查詢最新星數,每批 100 個,單趟要發 606 個請求,每個請求還會順帶查詢速率限額剩多少;中途斷了可以從紀錄檔續跑,不必整趟重來。刷完之後腳本把新資料寫進 repos.json、蓋上時間戳、自動 commit 進儲存庫,再重新部署靜態頁面。專案 176 個 commit 裡有 54 個是這支機器人簽的「refresh growth dataset」,儲存庫裡還留著 157 份歷史快照檔,翻開看確實是一天一份。
有個細節對得上「每日一刷、但要跑很久」這件事:排程寫的是 UTC 01:00 啟動,而連續多日的資料截止時間戳都落在 UTC 18:55 前後,中間隔了將近 18 小時。6 萬筆資料在 API 速率限制下分批慢慢刷,本來就不是幾分鐘能做完的事。換算成台北時間,每天的資料截止點大約是凌晨 2:55,也就是說台灣使用者早上打開網站,看到的都是「幾小時前」的快照,這個新鮮度對星數這種慢訊號來說綽綽有餘。
所以要判斷資料多新,看頁面右上角就對了:Daily Trending 頁面標頭會寫「Sep 20, 18:54 UTC」這樣的時間戳。你看到的「今天暴紅」,其實是昨天傍晚以前的變化。
還有一個名不符實的地方要提醒:排序選項上寫著 30d Growth(30 天成長),但資料層的增量是「這次查詢到的星數減掉上一版快照的星數」,取正值、最小為 0。在每天快照的節奏下,這個欄位實際上是約一天的變化量,不是 30 天。另一個副作用是負成長會被壓成 0:正在掉星的專案在地圖上只會顯示「沒變化」,不會顯示負數。以最近一份快照統計,60,524 筆裡有 44,803 筆增量是 0,將近四分之三的儲存庫在一天內星數紋絲不動,這也說明星數注定是個慢訊號,快照式的更新節奏其實夠用。
這個工具最有編輯頭腦的部分,是把「awesome 清單」和「軟體專案」分開。
做法寫在原始碼 lib/repo-classifier.ts 裡:一套關鍵字評分系統,儲存庫名稱裡出現 awesome、roadmap、tutorial、interview 這類字眼直接判為清單;描述裡出現 curated list(策展清單)、study plan(學習計畫)、step-by-step guide 之類的強關鍵字計 2 分、collection of 這類弱關鍵字計 1 分,累積到 3 分也判為清單;Markdown、Jupyter Notebook 這類標記類語言的專案再從嚴一分。被判為清單的不會被丟掉,整批移到 Awesome 分頁另成一張地圖。
我照著這套規則把資料集重算了一遍:60,524 筆裡有 3,446 筆被分進 Awesome 分頁,與線上 Awesome 頁面內嵌的資料列數完全一致,佔比約 5.7%。換句話說,主地圖上的 5.7 萬個方塊都是「做軟體的專案」,想找學習資源、面試準備、策展清單,再切到 Awesome 分頁去看,兩種需求不會混在一起。
評分系統當然會誤判,作者也留了後手:原始碼裡有一份強制保留名單,列了四個儲存庫。其中 Font Awesome 是真的會被規則掃走的那種,它名字裡就有 awesome 這個字,照規則必定被判成清單,但它其實是貨真價實的圖示字型軟體,所以被明文撈回來。另外三個(微軟 PowerToys、openai/codex、anthropics/claude-code)用現行規則算起來根本不會被排除,看起來是防禦性的手動保留,防止哪天描述改了幾個字就被規則掃走。
分流的實際效果,拿幾個大家都認得的名字來看最清楚:developer-roadmap(367,762 星,名稱含 roadmap)、system-design-primer(370,913 星,名稱含 primer)、coding-interview-university(361,242 星,名稱含 interview)這些大流量學習資源,全都乖乖落在 Awesome 分頁。但反方向的漏洞也存在:build-your-own-x(548,422 星)是道地的教學清單、free-programming-books(397,313 星)是電子書清單、public-apis(481,847 星)是 API 目錄,三者都因為名稱與描述剛好沒有觸發任何關鍵字,照樣留在主地圖上當最大的三個方塊。關鍵字分流抓得走「有自覺」的清單(名字就叫 awesome、roadmap 那種),抓不走用樸素字眼命名的內容站,這是讀圖時要先有的心理準備:主地圖的頂端仍然是內容與軟體混居,越往下(星數越少)分流的效果越明顯。
實際搜尋的體驗可以拿我們站上介紹過的工具來驗證:在搜尋框輸入 excalidraw,開源白板工具 Excalidraw 會以 132,523 星落在 TypeScript 群組裡;輸入 mcp-use 會找到 10,658 星的 MCP 框架,輸入 rybbit 則是 13,036 星的開源網站分析工具。搜尋會配對儲存庫名稱、描述與語言標籤;不過描述欄在資料層被截到約 100 字元(freeCodeCamp 的描述就在第 100 個字元斷頭),太冷門的關鍵字如果剛好排在描述後段,有可能搜不到。
Daily Trending 分頁是看「誰在動」的地方,但它有一道大多數榜單沒有的門檻。
原始碼裡寫死了兩個條件:參與排名的儲存庫,成長前的基線星數必須達到 2,500,而且建立時間必須滿 7 天。換句話說,一個昨天才開張、一夜衝上 3,000 星的專案進不了這張榜,因為它的基線是 0;能上榜的是「本來就有一定規模、這一天又明顯在長」的專案。這道門檻直接把煙火式暴紅擋在外面,留下的是持續有動能的專案,跟 GitHub Trending 的口味正好相反。
我把 60,524 筆全部重算驗證:符合資格的有 24,089 個,其中當日有正成長的 9,628 個,與頁面標頭顯示的數字逐字一致。以最近一份快照為例,增幅前幾名是 trycua/cua(電腦操作 Agent,單日 +888)、affaan-m/everything-claude-code(Agent 效能優化系統,+778)、anthropics/claude-code 本尊(147,019 星,+397)。另一個數字也值得看:全站單日增量最高的其實是 sindresorhus/awesome(+362),但它是清單不是軟體,這筆增量要切到 Awesome 分頁才看得到,剛好是編輯分層邏輯的活教材。

如果你照著網路上的舊介紹文連到 www.1kgithub.com,從台灣拿到的是一面中文防火牆頁,寫著觸發了防火牆規則、附一組存取代碼,內容完全進不去。這不是你的網路問題,而是那個網址已經不是這個專案現在的家。
這個專案的門牌史是這樣:
| 時期 | 網址 | 樣貌 |
|---|---|---|
| 2025-03 起 | www.1kgithub.com | 初版「GitHub Star Tracker」,網格與列表兩種檢視,一次列 50 筆 |
| 2026-04 至 06 | ustars.dev | 樹狀圖改版後的過渡網域,6 月被作者標記棄用 |
| 現行 | github-treemap.pages.dev | 樹狀圖 + 三種排序 + 261 個語言子頁 |
時間軸資訊截至 2026-09-21。初版的樣貌留在網際網路檔案館 2025 年 3 月 13 日的存檔裡:當時的標題是「GitHub Star Tracker」,介面是 Grid View 與 List View 的切換,一次列出 50 個儲存庫,跟現在的樹狀圖完全是兩個產品。專案儲存庫同樣建立於 2025 年 3 月 13 日,隔天就有人開 issue 反映「demo 打不開」,那個老入口的不穩定,其實從第一天就有跡可循。
真正的重寫發生在 2026 年 4 月 3 日。翻開 commit 歷史,這一天從 Create Next App 的初始 commit 開始,互動樹狀圖、語意縮放、每日趨勢、搜尋、SEO 全部在幾天內密集完工,4 月 5 日接上 GitHub Actions 自動更新,之後就交給機器人每天刷資料。舊網域 ustars.dev 失效後,作者在 6 月 1 日的 commit 訊息裡寫明把死掉的 ustars.dev 換成 github-treemap.pages.dev。至於 1kgithub.com 與現在的專案還有多少關係,儲存庫裡沒有任何說明,能確定的是:原始碼指定的官方站、以及 sitemap 裡的所有網址,都是 github-treemap.pages.dev。
先講授權與體質:MIT 授權涵蓋整個儲存庫,連資料集與刷新腳本都算在內,想抓一份資料做自己的分析是合規的。作者 xiaoxiunique(Atom),整個專案實際上是一個人加一支機器人在顧(作者本人 121 個 commit、機器人 54 個、AI 工具代簽 1 個),163 顆星、10 個 fork,但資料每天照刷,最新一筆更新就在前一天傍晚。儲存庫根目錄放著 CLAUDE.md 與 AGENTS.md,看得出作者自己也用 AI 工具協作開發。單人維運代表反應快,也代表公車風險:哪天作者不玩了,快照就停在前一天。
它適合的人大概長這樣:想用一張圖看清某個語言生態的高星版圖、想跳過清單文直接找值得研究的軟體專案、想追蹤成熟專案的每日動能變化。相對地,如果你要的是即時榜、手機上的輕量體驗(6 萬個方塊的 Canvas 渲染在低階裝置上的表現,官方沒有提供參考數字)、或者中文介面,它都給不了。
使用上從三個入口任選:首頁看全景,排序可以在 Stars、30d Growth、Forks 之間切換;Awesome 分頁找學習資源;Daily Trending 看誰在動。想鑽更深的話,點任何語言方塊會進入單一語言的子地圖(例如只看 Rust 或只看 Python),子地圖裡再按星數分層下鑽,從「100k+」一路切到「1k–2k」,每層有專屬網址,方便把某個語言某個星級帶的清單直接分享給同事。想自己架一份也行,MIT 授權允許,官方文件寫的路徑就是 npm build 加 Cloudflare Pages 部署,資料集和刷新腳本都在儲存庫裡。
最後提醒一個資料邊界:名單裡留著 133 筆星數已經跌出千星門檻的歷史列。多數是慢慢掉出門檻的老專案,但也有奇怪的案例,例如 google/cel-go,現在打開它的 GitHub 頁面會看到一個 2026 年 9 月 3 日才建立、0 星的新儲存庫,資料集也忠實把它抄成 0 星。這提醒我們這份快照記錄的是「GitHub 現在給的數字」,不是「這個專案的歷史成就」;把它當雷達用很好,當史料用的時候要自己查證。