Freenote 開源 AI 日記實測,日記留在瀏覽器、AI 用你的金鑰

Freenote 是一套 AGPL 開源的 Markdown AI 日記(Next.js),日記存在瀏覽器 IndexedDB、AI 用自己的 OpenAI 相容金鑰。2026 年 9 月實測:本機跑得起來,但專案已凍結一年半、沒有匯出功能,官方網址 freenote.app 現在轉向另一位開發者的 MemoCat。

用 AI 摘要這篇文章:

想用 AI 幫自己整理日記的人,多半會在同一個地方猶豫:日記是全部文字裡最不該上雲端的東西,但 AI 偏偏活在雲端。Freenote 是一個開源作者對這個矛盾的回答:一套跑在瀏覽器裡的 Markdown 日記本,筆記只存在你自己的電腦上,AI 功能則讓你自己填 API 金鑰、自己決定要不要開。聽起來兩全其美,實際把它 clone 下來跑過一遍、再逐檔讀完原始碼之後,答案比較接近「做對了一半」:儲存層的承諾是真的,AI 層的代價則藏在預設值裡。

先講結論。這是一個能用、也值得看的專案,但它是一份凍結的定稿:開發集中在 2025 年 2 月到 3 月的五個多星期,之後原始碼一行沒動;官方網址現在輸入下去,會直接轉到另一位開發者的產品。今天還想用它的人,等於接手一份不再更新的程式碼自己架、自己修,而且要先接受「日記沒有匯出功能」這個近乎一票否決的限制。以下把這些判斷的證據逐一攤開。

五個多星期寫完,然後定格

Freenote 的原始碼放在 GitHub 的 celerforge 帳號下(舊網址 celerforge-dev 也會自動轉過去),授權是 AGPL-3.0,授權條款全文完整放在倉庫裡。整個專案的開發史可以用一行講完:第一筆提交在 2025 年 2 月 7 日,最後一筆在 3 月 16 日,中間 66 次提交幾乎全部出自同一位署名 Chaoying 的作者。之後的一年半,main 分支再沒有新 commit,沒有出過任何一個正式 release,倉庫累積到 178 顆星、17 個 fork。

issue 版的狀態更誠實。全部 5 個 issue 都開在 2025 年 3 月,其中兩個到今天還開著:一個問能不能打包成 App,作者回了一句可以先拿 Pake 打包湊合、之後計畫用 Tauri 做桌面版,然後就沒有下文;另一個回報自動嵌入功能沒有作用,至今零回應。對照 README 裡的 roadmap,會發現清單上每一項都還是未勾選狀態,包括筆記匯入匯出、多裝置同步、加標籤、用 Tauri 打包桌面版。換句話說,你在介面上看到的功能就是全部的功能,roadmap 是一張願望清單,不是待辦進度。

這不代表它不能用。恰恰相反,一個停止變動的專案拿到的是「定稿」的性格:行為可預期、不會改版改到你找不到按鈕,程式碼也就兩千多 KB,讀得完。但要先認清,它不會再修 bug、不會長新功能,遇到問題只能自己改。

官方網址現在帶你去別人的產品

Freenote 本來有自己的官方網站 freenote.app,README 裡的入口連結全都指向它,側邊欄的對外連結倒是老老實實放著 GitHub 倉庫。2026 年 9 月實際連上去,這個網址會直接把人轉到 memocat.com,一個叫 MemoCat 的本地筆記工具。MemoCat 是另一位開發者 airyland 的作品,特色的賣點是標籤與巢狀標籤,同樣強調資料存在本地。兩個都是「本地筆記」這個品類,介面說明也長得像,照著舊介紹文裡的官網連結點進去的人,很容易以為 Freenote 改名換殼了,實際上已經是兩個不同人的產品。

據網路檔案館的歷史快照,freenote.app 到 2026 年 3 月中都還在正常服務 Freenote 本體,頁面標題還掛著「Freenote – Write Freely, Note Casually」。轉向是這之後半年內發生的事。域名為什麼換了主人、轉給誰,公開資料查不到確切答案,這裡不猜;對使用者的影響很實際:不要再把 freenote.app 當成它的官方入口,要用它,入口只剩 GitHub 倉庫一條路。

日記存在瀏覽器裡,這件事是真的

把倉庫 clone 下來,裝好依賴、跑起開發伺服器,整個應用幾十秒就出來了。介面全是英文,左側側邊欄分成兩區:筆記區有 Journal(日記)和 Knowledge(知識庫)兩種筆記型態,AI 區只有一個 Chat。不用註冊也不用登入,整份原始碼裡找不到任何會員或密碼邏輯。在日記頁打字就是寫作,Markdown 快捷輸入大致齊全:標題、粗體斜體、清單、程式碼區塊都會自動成型,只有引用塊是例外,輸入大於符號不會變成引用,就只是個普通字元。

儲存層經過實測驗證。寫一篇帶標題和清單的 Markdown 日記,重新載入頁面,筆記原封不動在原處;背後的機制在原始碼裡寫得很直白:它用 Dexie 這套函式庫在瀏覽器的 IndexedDB 裡開了一個名叫 freenote 的資料庫,總共四張表,放筆記本體、向量、聊天室、聊天訊息。IndexedDB 可以想成瀏覽器內建的小資料庫,資料落在你這台電腦的這個瀏覽器設定檔裡,伺服器上沒有對應的資料庫,專案裡也確實沒有任何伺服器端儲存的程式碼。斷網打開它照樣能寫,因為寫入的路徑根本不經過任何主機。

Freenote 日記頁:Markdown 日記重新載入後仍在,資料存在瀏覽器 IndexedDBPin
Freenote 的日記頁實測:寫入 Markdown 後重新載入頁面,筆記原封不動,儲存完全發生在瀏覽器的本機資料庫裡。

兩種筆記型態的分工值得知道。Journal 是照日期組織的日記流,打開就是今天,往上滑是過去;Knowledge 則是一個標題式的知識卡片清單,有自己的列表頁、搜尋框和新增視窗,標題是必填欄位。把靈感碎片丟 Knowledge、把長篇反思寫進 Journal,是這個設計預設的使用方式,而兩邊寫進去的內容都會進同一個本地資料庫、吃同一套 AI 流程,沒有誰比較隱私的差別。

要完整交代的是,頁面層有一個小小的例外:程式碼裡掛了 Vercel Analytics,也就是頁面瀏覽次數的統計腳本。它記錄的是「有人打開了頁面」這個等級的資訊,碰不到你的筆記內容;自己架的人可以直接把那一行拔掉。除此之外,整個應用對外沒有任何其他請求,這在依賴清單裡那些被註解停用的觀測工具對照下,看得出作者有刻意收過(他甚至留了一個宣告了卻完全沒用到的資料庫依賴,算是五週衝刺的小痕跡)。

填下金鑰的那一刻,日記就開始出門

AI 功能的入口在設定頁,畫面很單純:一個 API Base URL 欄位、一個 API Key 欄位。預設指向 OpenAI 的正式端點,但欄位是自由填寫的,任何 OpenAI 相容的服務都吃;要注意的是模型名稱寫死在程式裡,對話固定用 gpt-4o-mini,把文字轉成向量的嵌入模型固定用 text-embedding-ada-002,這代表你填的端點必須真的提供這兩個型號(或用同名的相容實作),不然對話與嵌入會直接失敗,設定頁並沒有讓你挑型號的地方。不填金鑰的話,AI 是整組鎖起來的,實測點進 Chat 頁,畫面中央只有一句「API Configuration Required」,請你先去設定金鑰。這個設計的進場姿態是 opt-in:你不主動交出金鑰,它什麼都不會做。

Freenote 的 Chat 頁在未設定 API 金鑰時顯示 API Configuration RequiredPin
沒填金鑰時的 Chat 頁:AI 整組鎖起來,只顯示 API Configuration Required,進場是明確的自行開啟設計。

問題出在交出金鑰之後。原始碼裡的自動嵌入開關,判斷邏輯是「設定值不等於 false 就算開啟」,也就是預設開、要自己動手關;而且只要金鑰存在就生效。實際行為是:你每存一次筆記,程式就把筆記內容照 Markdown 標題切段、程式碼區塊整塊保護起來,然後把「標題加段落」整包送到你設定的嵌入端點,得到的向量再存進本地資料庫。設定頁上那句「你的金鑰存在本地、絕不外流」就金鑰本身而言是真的,金鑰只會送向你填的那個端點;但筆記內容會出門這件事,畫面上沒有任何一個字提到。

Freenote 設定頁的 LLM Provider 畫面:API Base URL 與 API Key 欄位Pin
設定頁的 AI 供應商畫面:一個 Base URL、一個 API Key,預設指向 OpenAI,任何相容端點都能填。

把兩層拆開看就清楚了。「日記存在本地」是儲存層的事,成立;「AI 處理日記」是另一層,在這個設計裡必然要把內容送出去換向量、換回答。中間還有一個容易忽略的細節:AI 的呼叫是在 Next.js 的伺服器端執行的,你的金鑰存在瀏覽器 cookie 裡,每次連線會跟著請求送到架這個應用的那台機器。自己架的話那台機器就是你的,沒有第三方;但若哪天用別人架好的實例,金鑰與筆記內容都會經過對方的伺服器轉一手。想讓日記完全不出門,做法只有一個:不填金鑰,把它當純 Markdown 日記用,這樣它確實是一個乾淨的本地筆記本。

智慧搜尋的真面目,是瀏覽器裡的土法對照

宣傳文案裡的「AI 智慧搜尋筆記」,內部其實樸素得很可愛。跟筆記提問時,模型會先呼叫一個叫 retrieveNote 的工具,這時程式會先把你的問題文字送上嵌入端點轉成向量,再把本地資料庫裡所有筆記的向量從頭掃一遍,每一批一百筆、逐筆算距離,挑出最接近的前四段,塞回給模型當參考資料。沒有向量資料庫伺服器、沒有索引,就是一次老實的全文對照。這個設計的取捨很明白:掃描比對完全在你的瀏覽器裡完成,不必把整個筆記庫搬上任何伺服器;但問題文字會先經嵌入端點轉向量,被挑中的那幾段筆記內容也會進到對話裡,跟著請求出門。筆記量大之後,每次提問的掃描時間會線性變長,這是土法的代價。

還要替「搜尋」這兩個字卸妝一次:Knowledge 頁面那個搜尋框,走的完全不是向量,就是最基本的文字比對,標題或內容裡包含你打的字串就列出來,跟你在任何文件裡按 Ctrl 加 F 沒有本質差別。真正用到向量的只有 Chat 的檢索工具,所以就算完全不碰 AI,Knowledge 的搜尋照樣能用,只是它也照樣只是字串匹配。

還有兩個介面上看似 AI 的東西,看了原始碼會清醒一點。聊天室的自動命名,是把你的第一句話取前五個詞、超過三十個字元就截斷,純字串運算,連模型都沒呼叫;Chat 回答時那個「只回答問題、找不到就說沒有相關筆記」的乖巧個性,則來自一段寫死的系統提示詞。這不是批評,一個五週的個人專案把力氣花在架構而不是包裝上,反而是它可讀的原因,只是使用者該知道介面上的智慧感有多少是機械規則。

順便回答兩個最常被問到的問題。不想讓日記出門,還能用它的 AI 嗎?不能,這是設計而非遺漏,嵌入與對話都需要外部模型。那把自動嵌入關掉、要用的時候再開呢?可以,設定頁有這個開關,關掉之後筆記就不再隨存檔外送,只有你主動提問時,被檢索到的段落會出門,這是這套設計裡隱私與便利之間最細的控制線。

自架之前要先點頭的三件事

日記拿不出來,這是最重的一條。整個應用沒有匯出或匯入功能,功能清單裡列了、程式碼裡沒做。你的日記存在瀏覽器的 IndexedDB 裡,沒有任何按鈕可以把它變成檔案帶走,換電腦、換瀏覽器,甚至清一次快取,都可能讓累積的日記整批消失。技術上當然可以打開開發者工具把資料庫挖出來,但對一個以「長期寫日記」為目的的應用來說,沒有匯出幾乎是一票否決:日記這種東西的價值會隨時間累積,而這裡的保存期限綁在你這個瀏覽器設定檔的壽命上。

功能面也停在定格。多裝置同步和標籤列在 roadmap 上始終沒被打勾,手機版更是連 roadmap 都沒排上。它的定位是單機單瀏覽器的個人日記,想在手機上接續寫,沒有路。

最後是沒有後援這件事。停止維護超過一年半、issue 版的最後動靜停在 2025 年 3 月,這些前面講過了,這裡補法律面:AGPL-3.0 允許你自由使用、修改、自己架,但如果你改了程式碼還提供網路服務給別人用,有義務公開你改過後的完整原始碼。自己關起門用完全沒問題,想拿它架個服務給親友或社群,要先想清楚這個傳染性條款。

安裝本身是舒服的,兩條路任選:有 Node.js 環境的(文件要求 18 版以上,這次在 26 版上實測一次就通),clone 倉庫後 pnpm install 再 pnpm dev;不想碰 Node 的,倉庫裡附了標準的 Dockerfile,照文件 build 起來開在 3000 埠。還附了一份官方中文說明文件(README.cn.md),介面雖是英文,文件有中文可對照。

誰該把它裝起來,誰看看就好

最該裝它的人,是想讀程式的人。一份兩千多 KB、五週寫完、單一作者、結構乾淨的 local-first AI 應用原始碼,是這類架構相當好的教學樣本:瀏覽器資料庫、BYOK 金鑰、向量檢索、工具呼叫,每一塊都是最小可運作的版本,沒有商業包裝的干擾。另一種是真心想要一個「絕對不上雲」的 Markdown 日記、而且能接受沒有匯出風險的人:不填金鑰的 Freenote 是一個誠實的離線筆記本,代價自負。

至於想要一裝就能用、還指望雲端同步跟手機接續的一般使用者,這不是你的工具,路過看看就好。同樣是開源 Markdown 筆記,先前介紹過的NoteGen走的是內建免費模型的另一條路,代價是預設經過站方伺服器;要自架的完整筆記庫,可以回頭看自架優先的EdgeEver;只是想要個輕量本地隨手記的,Meow Memos更貼近那個用途。挑這類工具時有個從 Freenote 學到的檢查法:聽到「資料存在本地」,先分開問兩個問題,儲存在哪裡,以及 AI 處理時內容流向哪裡。這兩個答案常常不一樣,而廣告文案通常只講第一個。

Freenote 的官方網址如今指向別人的產品,程式碼倒是誰都能從倉庫 clone。一個五週的熱情留下的東西,比多數五分鐘的熱情多了一個 AGPL 授權和一個能跑的架構;至於要不要讓它變成你日記的下一個家,現在你知道代價清單了。

Sliven 褚崇名
Sliven 褚崇名

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

文章: 1427

發佈留言

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


Share to...