Trendingrepos 開源工具:用漲幅重排 GitHub 熱門專案榜

Trendingrepos 把 200 顆星以上的 GitHub 專案按日、週、月漲幅排序,每小時更新、可翻頁、可按語言篩;漲幅等於總星數代表新進榜的整包星數,GitHub 官方 Trending 也仍在運作。

用 AI 摘要這篇文章:

2026 年 9 月中的一個深夜,打開 trendingrepos.glup3.dev 的日榜,第一名是一個收集中小學到大學教科書 PDF 的倉庫 ChinaTextbook,畫面上的漲幅寫著 +81,750,而它的總星數正好也是 81,750。看起來像一天暴衝 8 萬顆星的奇蹟,但這個倉庫不是新面孔:網際網路檔案館的歷史封存顯示,它在 2025 年 9 月就有約 5 萬顆星,2026 年 7 月已經來到 7.5 萬顆。「一天 +81,750」不是真實成長,而是這個榜單計算規則造出來的數字。看懂這條規則,是用好這個站的關鍵:把 GitHub 上的熱門專案,用「特定期間內增加了多少顆星」排出名次,日榜、週榜、月榜各一份,每小時刷新一次。

這個榜的數字怎麼來、怎麼讀才不會誤判、以及它和 GitHub 官方 Trending 差在哪,是讀榜前值得先弄清楚的三件事。文中每個關鍵數字,都可以在網站畫面、公開原始碼或 GitHub 官方資料裡自己核對一次。

榜單打開長什麼樣:三種週期、31 種語言、每小時一刷

首頁就是榜單本體。頂部三個分頁切換 Daily、Weekly、Monthly,旁邊是語言篩選列,從 C#、Go、Python 到 Zig 共 31 個選項,連「Unknown」都獨立成一格。每一列顯示專案名稱、描述原文(中文專案的描述就維持中文,不翻譯)、主要語言、總星數,以及最重要的那個綠色漲幅數字,點專案名稱直接連回 GitHub 原倉庫。畫面右側標著最近一次更新時間,深夜查看時顯示的時間戳是當晚 11 點 22 分,對照原始碼裡每小時執行一次的排程設定,資料的鮮度是可驗證的。

Trendingrepos 日榜畫面,列出專案名稱、描述、語言、總星數與漲幅數字Pin
Trendingrepos 日榜:ChinaTextbook 漲幅 +81,750 等於總星數,右側標示最近更新時間(官方網站,2026 年 9 月)

翻頁是它和官方榜最直觀的差別。每一頁 25 筆,用上一頁、下一頁一路往下翻,原始碼設定的上限是 10,000 頁。換句話說,這裡陳列的對象是整個通過收錄門檻的專案宇宙,而不只是前 25 名。語言篩選和翻頁可以疊著用:切到 Python 再往後翻,看到的就是 Python 生態裡動能最強的一長串名字,從幾千顆星的大專案一路排到漲幅剛好過門檻的小型新專案,這種縱深是官方榜給不了的視角。

漲幅數字是怎麼算出來的

這個站的核心價值在那個「+81,750」,而它的計算方式全部攤在開源原始碼裡。資料載入器每小時呼叫一次 GitHub 的 GraphQL 搜尋端點,把每個收錄專案當下的總星數存成一筆快照;SQL 資料庫裡的日榜,就是「今天最後一筆快照減去昨天最早一筆快照」,週榜往回 7 天,月榜往回 30 天。

這裡有一個讀榜前必須知道的細節。視窗第一天沒有快照的專案,缺少的過去值會被直接當成 0,所以它的漲幅會等於總星數。實際對照當晚的榜單可以看得非常清楚:ChinaTextbook 的漲幅 +81,750 與總星數完全相同,代表索引在視窗起點沒有它的快照。它前一天為什麼不在索引裡?可能是剛被收錄、也可能是那一輪抓取漏掉了它,從榜單本身看不出來,能確定的是它絕非一天長出 8 萬顆星。而月榜上的 archify 總星數 58,196、漲幅 +46,773,兩個數字不相等,代表 30 天前它已經有約 11,400 顆星,這 46,773 才是貨真價實的一個月動能。看到漲幅等於總星數的列,正確的讀法是「視窗起點沒有它的快照」,而不是機械地把它當成整段期間的成長量。

Trendingrepos 月榜畫面,archify 顯示總星數 58,196 與漲幅 +46,773 兩個數字Pin
Trendingrepos 月榜:archify 總星數 58,196、漲幅 +46,773,兩數不相等代表區間起點已有快照(官方網站,2026 年 9 月)

查詢的效率也藏在同一套設計裡。三種週期的榜單各自對應一張預先算好的彙總檢視表,每小時跟著資料一起重算,網頁查詢時直接讀結果,作者宣稱這讓回應時間壓在 100 毫秒內。從架構圖看,這是一條教科書式的資料管線:Go 負責抓,時間序列資料庫負責存與聚合,前端框架負責顯示,每一層都是常見的開源元件,沒有魔法。

數字本身的準確度也可以核對。把站上 ChinaTextbook 的星數拿去問 GitHub 官方 API,回覆是 81,750,完全一致;另一個專案 diagram-design 站上顯示 38,316 顆,官方 API 當時是 38,343,差 27 顆,這是每小時更新節奏下正常的時間差,不是資料錯誤。

至於收錄規模,作者在文件裡宣稱每小時會抓取約 24 萬個倉庫、21 分鐘抓完,並且用逐步縮小星數區間的方式(例如從 stars:200..500000 一路縮到 stars:200..20000)繞過 GitHub 搜尋一次最多回 1,000 筆的限制。這套階梯式抓法在原始碼裡有一份預先算好的界點表,從 1,000,000 一路排到 200,界點之間的間隔越往下越密,確保每一段區間裡的倉庫數都不超過 1,000,機制屬實;不過 README 提到「同時丟出 200 個請求」,程式碼裡的併發上限常數卻是 20,這類規模數字參考就好,以程式碼為準。

先澄清一個流傳很廣的說法:GitHub 官方的 Trending 頁面目前仍然在運作,並沒有被移除。現在打開 github.com/trending 依然是當日熱門榜,每一列同樣附有「3,440 stars today」這類漲幅標註,切到週榜、月榜也看得到對應期間的數字。GitHub 確實曾經在 2022 年 9 月初宣佈因為使用率偏低,要在當月底移除這個功能,在社群強烈反彈之後收回成命。網路上「官方已經下架、只能找第三方替代」的描述,與現況不符。

所以兩者的關係更接近互補。真正差別整理如下。

對照維度GitHub 官方 TrendingTrendingrepos
呈現深度單頁約 16 至 25 個專案,無法翻頁每頁 25 筆,最多可翻 10,000 頁
漲幅數字有,標在每列右側有,與總星數並列對照
期間選擇今日、本週、本月日、週、月(回看上限 30 天)
排序方法未公開純星差排序,SQL 與原始碼全公開
資料取用無官方 API整套開源,可自行架設

一句話總結:官方榜給你一頁櫥窗,Trendingrepos 給你整個倉庫。官方頁看不到第 26 名以後的世界,也不解釋排名規則;這裡從第 1 名到漲幅只剩 5 顆星的長尾都翻得到,而且每一個數字都能回溯到快照與 SQL。哪一邊「推薦得更準」沒有對稱證據可以判斷,能確定的只是資訊量與透明度的差別。

這樣的差別在實際使用時對應到不同的問題。官方榜適合「今天掃一眼有什麼新鮮事」;星差榜適合需要縱深的人:想確認某個正在考慮引入的套件是持續升溫還是曇花一現、想在面試或研究裡找有素材的活專案、或是維護者想看自己的倉庫在所屬語言裡的相對位置。翻頁與語言篩選在這些場景裡才有意義,因為答案往往不在第一頁。

看榜之前,先知道這四條規則

這個榜有自己的入場規則,每一條都會改變你對數字的解讀。

收錄門檻是 200 顆星。資料載入器的常數寫死最小星數 200,低於這個數字的專案根本不會進索引。所以這裡看不到「明天的黑馬」,它捕捉的是已經被一定數量的人按過星的專案之間的相對動能。想在極早期發現專案的人,這裡幫不上忙;反過來說,一個專案出現在這裡的長尾,代表它至少已經通過了第一輪真實使用者的篩選,拿來當候選清單的起點比總星數排行更貼近「現在誰在動」。

漲幅低於 5 不顯示。前端查詢寫明只取星差 5 以上的列,安靜累積星數的專案不會出現在榜上。對讀者的意義是:這是一份動能榜,不是一份總量榜。

新進榜的漲幅是整包星數。前面提過的 COALESCE 規則,讓視窗起點沒有快照的專案把總星數整包記成漲幅。它標記的狀態是「前一天不在索引裡」,成因可能是剛爆發、剛被收錄,也可能只是那一輪抓取的遺漏,開頭的 ChinaTextbook 就是現成的例子。

最多回看 30 天。原始快照的保留期一開始設定在 30 天,後來放寬到 35 天,讓月榜「今天對 30 天前」的比較區間保有安全餘裕。沒有季榜、沒有年度榜,想看長期趨勢得自己想辦法,例如定期把榜單存下來。

單人維護的開源站,可以放心用嗎

基礎事實先列清楚:專案採 MIT 授權,倉庫裡有正式的授權條款檔案;作者是開發者 Phuc Tran(GitHub 帳號 glup3);使用上完全不需要帳號,沒有登入、沒有付費牆,開網站就能用。隱私方面,頁面會載入一支作者自行架設的 Umami 統計腳本(網域掛在 coolify.glup3.dev 之下),記錄的是頁面瀏覽行為,資料落在作者自己的伺服器,不是第三方廣告體系;除此之外沒有其他追蹤器。

專案活躍度則呈現一種反差。主分支最後一次合併停留在 2026 年 3 月 19 日,到現在將近半年沒有新的程式碼變更,歷史上總共也只有兩個 issue:一個回報某天榜單沒有資料,另一個來自外部貢獻者,修正中文這類雙位元組描述在版面卡片上溢出的顯示問題,兩個都已解決,後者正是那次最後的合併。但網站的資料仍然每小時刷新,深夜的時間戳依然指向當天。程式碼凍結、服務活著,這對一個架構簡單的資料管線來說是好消息,也表示它沒有人在積極開發新功能。單人維護的服務向來有延續性風險,習慣依賴它之前,記得這一點。

想自己架一套也是可能的,原始碼是完整的:Go 寫的資料載入器、TimescaleDB 資料庫、TanStack Start 前端,環境變數需要填 GitHub 的存取權杖與資料庫連線。不過這是一條給願意照顧基礎設施的人走的路,對多數讀者來說,直接使用官方站是成本最低的選擇。

從哪裡開始用起

最省事的驗證方式,是找一個你本來就在關注的專案,分別在 GitHub Trending 和這裡查它今天的星數與漲幅,兩邊數字對得上,你就同時完成了對資料準確度的抽樣檢查,也看清了兩種呈現方式的差異。接著切到週榜和月榜,觀察你熟悉的領域最近在漲什麼,像是本地 AI 應用(先前介紹過的 AgenticSeek 就屬於這類)或開源 Android 工具(例如 GKD),再翻幾頁長尾,看看第 200 名、第 500 名的世界長什麼樣子。對經常把 GitHub 當資料來源的人,例如使用 Xget 加速抓取開源文件的讀者,把這個星差榜加進書籤的成本幾乎是零,它不吃帳號、不留資料,用不順手隨時可以退回官方榜。

常見的疑問整理成三題。

漲幅等於總星數,是網站的 bug 嗎? 不是。那是「視窗起點沒有快照」的設計結果,過去值記為 0,漲幅自然等於現在的總星數。它標記的是前一天不在索引裡,可能是新爆發,也可能是抓取遺漏,拿去和倉庫的歷史星數對一下就知道是哪種。

什麼情況下用官方榜就夠了? 只是每天掃一眼圈子裡的大事、不需要往深處翻的話,官方 Trending 完全夠用,還省一個書籤。需要縱深、需要語言切片、需要回看一整月的排名變化時,星差榜的價值才會顯現。

不到 200 顆星的專案看得到嗎? 看不到。收錄門檻寫死在資料載入器裡,這個榜只服務已經過了第一輪篩選的專案。

可以查半年前或一年前的榜單嗎? 不行。快照保留約 35 天,榜單最長回看 30 天,更早的歷史不在它的能力範圍內。需要長期軌跡的話,自己排程定期保存榜單頁面,或直接考慮自架整套管線,把資料留在自己的資料庫裡。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 1243

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...