[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-wasm-one-codebase-many-runtimes-zh":3,"article-related-wasm-one-codebase-many-runtimes-zh":30,"series-tools-a65b29dd-57d7-46c1-9ea9-60519a6ae8c6":82},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":29},"a65b29dd-57d7-46c1-9ea9-60519a6ae8c6","wasm-one-codebase-many-runtimes-zh","Wasm 讓一份程式跑多個 runtime","\u003Cp data-speakable=\"summary\">這篇拆 WebAssembly 的實戰套路，最後給你一份能直接拿去跑 browser、edge、plugin 的模板。\u003C\u002Fp>\u003Cp>我玩 WebAssembly 有一段時間了。老實說，前幾年我一直覺得它很像一個「看起來很對、用起來很煩」的東西。demo 很漂亮，簡報很會講，但我真的要把同一份邏輯塞進瀏覽器、server、edge 的時候，整個流程就開始冒煙。build 步驟不一樣、runtime 假設不一樣、包裝方式也不一樣，最後我不是在寫功能，是在跟環境打架。\u003C\u002Fp>\u003Cp>最煩的是，大家都愛講「一次編譯，到處執行」，但我實際碰到的是「一次編譯，三種接法，四種坑」。我試過把 JS 的熱路徑搬出去，也試過拿它做 plugin sandbox，結果不是 boundary 太醜，就是 host 整合太碎。那時候我就知道，問題不是 WASM 不行，是我還在用老的腦袋看它。\u003C\u002Fp>\u003Cp>後來我看到這篇 \u003Ca href=\"https:\u002F\u002Fdev.to\u002Fzny10289\u002Fwebassembly-in-2026-the-quiet-revolution-that-finally-delivered-8ff\">ZNY 在 DEV Community 的 WebAssembly in 2026\u003C\u002Fa>，才把很多零散的感覺串起來。它不是在吹 WASM 多神，而是在講它現在到底適合拿來幹嘛。我就順著這個方向，把能直接抄的部分拆成一份給\u003Ca href=\"\u002Ftag\u002F台灣開發者\">台灣開發者\u003C\u002Fa>看的版本。\u003C\u002Fp>\u003Ch2>先別把 WASM 當語言，這個坑我踩過\u003C\u002Fh2>\u003Cblockquote>WebAssembly is a binary instruction format, not a language. You compile Rust, C++, Go, or other languages to WASM.\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：WASM 不是你平常拿來寫業務邏輯的那個東西，它是目標格式。你真正寫的通常是 \u003Ca href=\"\u002Ftag\u002Frust\">Rust\u003C\u002Fa>、C、C++、Go 這些語言，然後再編譯成 WASM。這個差別很重要，因為很多人一開始就把它當成另一種程式語言，後面設計整個歪掉。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779972510506-qf51.png\" alt=\"Wasm 讓一份程式跑多個 runtime\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我以前也很愛問錯問題，像是「要不要用 WASM？」這種問法其實很空。比較實際的問法應該是：我要用\u003Ca href=\"\u002Fnews\u002Fkpmg-claude-hezuo-caishi-ai-guwenye-de-zhengjie-zh\">什麼\u003C\u002Fa>語言寫、哪個 runtime 來載、邊界\u003Ca href=\"\u002Fnews\u002Fhow-to-track-anthropic-events-and-webinars-zh\">怎麼\u003C\u002Fa>切、哪些資料要跨過去。你一旦把問題改成這樣，很多決策就會自己浮出來，不用再靠想像。\u003C\u002Fp>\u003Cp>我之前做過一個數值處理模組，原本想直接把整包邏輯搬到 WASM。結果寫到一半才發現，真正貴的是 boundary，不是算式本身。資料序列化、呼叫成本、錯誤回傳，這些東西才是你花時間的地方。你如果只是為了「看起來比較先進」就搬，最後只會得到更複雜的系統。\u003C\u002Fp>\u003Cp>實操寫法很簡單：把 WASM 當成可部署的計算核心，不要當成 app 全家桶。先挑一塊最明確的熱點，例如 parser、encoder、crypto、壓縮、轉換，然後把它包成一個 \u003Ca href=\"\u002Ftag\u002Fapi\">API\u003C\u002Fa> 很窄的模組。UI、狀態管理、網路協調，這些都留在 host。這樣你才不會把自己搞死。\u003C\u002Fp>\u003Cul>\u003Cli>先決定 authoring language，再決定 runtime，不要反過來。\u003C\u002Fli>\u003Cli>API 越小越好，跨 boundary 的資料越單純越好。\u003C\u002Fli>\u003Cli>先量測呼叫成本，再決定要不要搬。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>browser 不再是唯一舞台，這點我現在很買單\u003C\u002Fh2>\u003Cblockquote>WASM is the runtime for edge computing, plugin systems, server-side apps, and the browser.\u003C\u002Fblockquote>\u003Cp>這句話我看完是有點停住的。以前我腦中對 WASM 的定位，真的就是「瀏覽器裡的效能補丁」。但現在這個想法太小了。它比較像一個可攜的執行層，只是剛好 browser 先把它養大，後來 edge、server、plugin 系統也都開始能用。\u003C\u002Fp>\u003Cp>這就是為什麼現在大家會把 \u003Ca href=\"\u002Ftag\u002Fcloudflare\">Cloudflare\u003C\u002Fa> Workers、Fastly Compute、AWS Lambda@Edge、Node.js、Deno、Bun 一起提。重點不是這些名字本身，而是同一份邏輯可以被不同 host 載入。對我來說，這才是 WASM 真正值錢的地方：你不用為每個環境重寫一遍核心邏輯。\u003C\u002Fp>\u003Cp>我以前做過一個前後端都要用的驗證與轉換流程，最討厭的就是 browser 跟 server 版本慢慢長歪。今天前端先修一個 bug，明天後端又補一個 workaround，三個月後兩邊根本不是同一套規則。WASM 的價值不在「跑得很快」而已，它更像是幫你把邏輯收斂成單一來源。\u003C\u002Fp>\u003Cp>實操寫法：如果你已經知道某段邏輯要同時出現在 browser、edge、server，先不要寫兩份三份。把共享邏輯抽成 WASM module，host 只做薄薄的 adapter。你可以把它想成「一份核心，多個外殼」。這樣版本控管、測試、回歸都會比較乾淨。\u003C\u002Fp>\u003Cul>\u003Cli>適合：驗證、解析、轉換、壓縮、加解密、推論。\u003C\u002Fli>\u003Cli>不適合：DOM 操作、密集 I\u002FO、非常 chatty 的流程。\u003C\u002Fli>\u003Cli>核心原則：共享邏輯進 WASM，環境差異留在 host。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>WASI 不是口號，它是 WASM 真的能出門的原因\u003C\u002Fh2>\u003Cblockquote>WASI provides a standardized way for WASM modules to interact with system resources like files, network, and clocks.\u003C\u002Fblockquote>\u003Cp>白話一點講，WASI 就是在幫 WASM 補上「跟系統講話」這件事。沒有這層東西，WASM 很容易只剩下瀏覽器裡的玩具感；有了它，module 才比較像一個真的能跑工作負載的東西，而不是只能展示的 demo。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779972508764-pbhl.png\" alt=\"Wasm 讓一份程式跑多個 runtime\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我很討厭那種「標準化」三個字講得很大聲、落地卻很虛的技術。不過 WASI 這次算是比較務實。它不是要把 OS 全部重做一遍，而是只給 module 需要的那幾種能力：檔案、時間、基本系統資源。這種收斂反而比較像工程，不像行銷。\u003C\u002Fp>\u003Cp>我自己最能接受的切法是：把 WASI 拿去處理輸入、輸出、批次轉換這種工作。像是讀檔、清洗、轉格式、產出結果，這些都很適合。你不需要讓 module 直接理解整個 host 的內部世界，只要它拿得到必要資源就夠了。\u003C\u002Fp>\u003Cp>實操寫法：先從 deterministic 的任務開始，不要一開始就碰複雜服務協調。你可以把它想成一個「有標準接口的工作箱」。host 負責把資料塞進去，WASM 負責算完吐出來。這樣你才會真的感受到 portability 的好處，而不是卡在整合細節裡。\u003C\u002Fp>\u003Cp>如果你想追這條線，我會先看 \u003Ca href=\"https:\u002F\u002Fwasi.dev\u002F\">WASI\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fwebassembly.org\u002F\">WebAssembly\u003C\u002Fa>，還有 \u003Ca href=\"https:\u002F\u002Fbytecodealliance.org\u002F\">Bytecode Alliance\u003C\u002Fa>。這三個地方比較接近規格、runtime、工具鏈的核心，不是只會講故事的頁面。\u003C\u002Fp>\u003Ch2>Rust + WASM 不是唯一解，但它真的最少讓人後悔\u003C\u002Fh2>\u003Cblockquote>cargo add wasm-bindgen serde serde_json --target wasm32-wasip1\u003C\u002Fblockquote>\u003Cp>這行我看了會點頭，因為它很像真正能進 production 的寫法，不是那種只適合 demo 的東西。Rust 現在做 WASM，最大的優點不是「潮」，而是工具鏈夠穩。你大概知道編譯會怎麼走、型別會幫你擋掉什麼、runtime 的邊界會在哪裡出事。\u003C\u002Fp>\u003Cp>翻譯一下就是：Rust 幫你把很多本來要自己補的坑先補起來。你不用手刻 binary，不用猜 export 長什麼樣子，也不用自己發明一套很醜的 glue code。像 \u003Ca href=\"https:\u002F\u002Frustwasm.github.io\u002Fdocs\u002Fwasm-bindgen\u002F\">wasm-bindgen\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Frustwasm.github.io\u002Fwasm-pack\u002F\">wasm-pack\u003C\u002Fa> 這些工具，目的就是讓 module 看起來像正常 artifact，而不是某種神秘副產品。\u003C\u002Fp>\u003Cp>我之前做過一個 browser 和 Node 都要共用的資料轉換器，第一版用 JS 包來包去，資料複製超多，整個很煩。後來換成 Rust module，boundary 收斂之後，整體反而比較好維護。這不是因為 Rust 比較高級，是因為它剛好適合做這種「純計算核心」的東西。\u003C\u002Fp>\u003Cp>實操寫法：如果團隊本來就會 Rust，那就直接用，別裝沒事。如果團隊完全不熟，也不要假裝學習成本不存在。它確實有成本，但當你的模組是 CPU-heavy、security-sensitive、或需要跨 runtime 重用時，這筆成本通常值得。反過來說，如果只是薄薄一層 app state wrapper，我會直接待在 host language。\u003C\u002Fp>\u003Cp>我自己的判斷很簡單：能不能把邏輯寫成純函式、能不能把輸入輸出講清楚、能不能把 host 的雜訊隔離掉。三個都能，Rust + WASM 很值得；兩個以上不行，我就先不要自找麻煩。\u003C\u002Fp>\u003Ch2>component model 才是把多語言拼起來的正經方法\u003C\u002Fh2>\u003Cblockquote>The component model means you can mix Rust, Go, and C++ components in one application.\u003C\u002Fblockquote>\u003Cp>這句我覺得很值得拆。早期 WASM 比較像是「單一模組輸出一個東西」，你可以跑，但不好組。component model 的方向比較像是把它變成可組裝的系統，讓不同語言寫出來的東西能用比較乾淨的接口接在一起。\u003C\u002Fp>\u003Cp>也就是說，WASM 正在從「一顆 module」往「一組有型別邊界的 component」移動。這對 production 很重要，因為真實世界的系統本來就不是單體。你一定會遇到不同團隊、不同版本、不同責任邊界，然後還要互相配合。沒有這種組裝能力，WASM 就只能當單點工具。\u003C\u002Fp>\u003Cp>我看過太多 plugin 架構最後變成 host 自己扛所有髒活。插件一多，依賴一亂，host 就開始像垃圾場。component model 的吸引力就在這裡：它讓你保留隔離，又不必把整個系統切成互不相干的碎片。\u003C\u002Fp>\u003Cp>實操寫法：如果你有多個團隊各自負責不同能力，或是你想把某些功能做成可替換、可獨立版本化的單元，就該考慮 component model。它很適合 plugin、extension、內部平台、跨語言協作。若你只是要把一個小功能搬上 WASM，現在先不用把架構搞太大。\u003C\u002Fp>\u003Cul>\u003Cli>適合：插件、擴充、跨團隊協作、可替換能力。\u003C\u002Fli>\u003Cli>適合：語言不該決定架構的地方。\u003C\u002Fli>\u003Cli>不適合：只有一個小模組卻硬上複雜組裝流程。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>插件系統是 WASM 最快讓人有感的地方\u003C\u002Fh2>\u003Cblockquote>Extism is the framework for building plugin systems with WASM.\u003C\u002Fblockquote>\u003Cp>這段我很買單，因為我真的做過不少 plugin 系統，知道傳統做法有多容易翻車。你要處理 untrusted code、依賴隔離、版本衝突，還要避免 host 被插件拖垮。這種時候，WASM 的 sandbox 邊界就很有感。\u003C\u002Fp>\u003Cp>如果你想看具體工具，\u003Ca href=\"https:\u002F\u002Fextism.org\u002F\">Extism\u003C\u002Fa> 是個很好的例子。它把 plugin 當成 WASM module 來載入，host 只需要呼叫函式、傳資料、收結果，不用把整個系統開給對方。這種安全感是我會想要的，不是那種「我們有做保護」的口頭保證。\u003C\u002Fp>\u003Cp>翻譯一下就是：你可以讓別人擴充你的產品，但不用把整個 process 的控制權交出去。這對 SaaS、內部平台、資料轉換工具、內容處理管線都很實際。比起自己發明一套 scripting language，我會先看 WASM plugin 層，通常比較省事。\u003C\u002Fp>\u003Cp>實操寫法：如果你的產品需要自訂 filter、importer、policy hook、transform，先別急著造語言。先把 plugin API 壓到最小，資料進出都用 plain JSON 或 typed value，插件不要直接碰 host internals。你越克制，後面越好維護。\u003C\u002Fp>\u003Cp>如果你想看 runtime 端的落地，\u003Ca href=\"https:\u002F\u002Fwasmtime.dev\u002F\">Wasmtime\u003C\u002Fa> 也值得看。它不是拿來唬人的名詞，而是很實際地把 WASM 跑起來，讓你知道這東西不是只能在簡報裡活著。\u003C\u002Fp>\u003Ch2>別把 WASM 神化，我只會拿它處理難纏的那幾塊\u003C\u002Fh2>\u003Cblockquote>Use WASM when you need performance-critical computations, portability across environments, sandboxed plugin systems, or existing C\u002FRust code in the browser.\u003C\u002Fblockquote>\u003Cp>這句話我覺得很誠實。它沒有在騙你說 WASM 什麼都能取代，也沒有硬把 JavaScript 拉下來踩。這就對了。技術選型最怕的就是把工具當信仰，結果把整個系統越搞越重。\u003C\u002Fp>\u003Cp>白話講，WASM 是專門工具，不是萬用刀。它最有價值的地方是：算得重、要跨環境、要隔離、要重用既有 C\u002FRust 程式。這些條件只要中一兩個，就值得認真\u003Ca href=\"\u002Fnews\u002Fhow-to-assess-carb-face-beauty-claims-zh\">評估\u003C\u002Fa>；如果都沒有，那我通常會勸自己冷靜一點。\u003C\u002Fp>\u003Cp>我自己的習慣是先問三個問題：這裡真的有瓶頸嗎？這段邏輯真的要跑在多個 runtime 嗎？sandbox 真的有幫助嗎？三題都答不出來，我就不搬。這樣可以少掉很多不必要的架構成本，也比較不會在半年後回頭罵自己。\u003C\u002Fp>\u003Cp>實操寫法：把 WASM 留給 image transform、compression、parser、crypto、simulation、\u003Ca href=\"\u002Ftag\u002Finference\">inference\u003C\u002Fa> 這類工作。UI、DOM、網路協調、狀態流轉，留在 host 語言就好。這種分工通常是最穩的，也最不容易讓團隊失控。\u003C\u002Fp>\u003Cp>我也會提醒自己一件事：越是想把所有東西都塞進 WASM，越容易忽略 host 的優勢。你不是在重寫世界，你只是在挑一塊最值得搬的地方。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># WASM adoption template for 2026\n\n## 我什麼時候該用 WASM\n- 我已經量到明確的 CPU 瓶頸。\n- 同一段邏輯要跑 browser、edge、server，或 plugin host。\n- 我需要 sandbox untrusted code。\n- 我想重用既有的 Rust \u002F C \u002F C++ 核心邏輯。\n\n## 我什麼時候不該用 WASM\n- 功能主要是 UI、DOM、state orchestration。\n- 問題本質是 I\u002FO，不是運算。\n- 這段程式強依賴 host framework。\n- 團隊沒有餘裕多養一層 build 與 runtime boundary。\n\n## 預設技術組合\n- Authoring language: Rust\n- Browser packaging: wasm-bindgen + wasm-pack\n- Runtime: Wasmtime \u002F Node.js \u002F Deno \u002F Bun \u002F host-native WASM support\n- System interface: WASI\n- Plugin layer: Extism\n\n## 專案結構\nmy-wasm-project\u002F\n  src\u002F\n    lib.rs\n  pkg\u002F\n  Cargo.toml\n  README.md\n\n## 最小 Rust module\nuse wasm_bindgen::prelude::*;\n\n#[wasm_bindgen]\npub fn process_data(input: &str) -> String {\n    let reversed: String = input.chars().rev().collect();\n    format!(\"Processed: {}\", reversed)\n}\n\n#[wasm_bindgen]\npub fn calculate_stats(numbers: &[f64]) -> JsValue {\n    let sum: f64 = numbers.iter().sum();\n    let count = numbers.len() as f64;\n    let mean = if count > 0.0 { sum \u002F count } else { 0.0 };\n\n    serde_wasm_bindgen::to_value(&serde_json::json!({\n        \"sum\": sum,\n        \"mean\": mean,\n        \"count\": count\n    }))\n    .unwrap()\n}\n\n## Build commands\nrustup target add wasm32-wasip1\ncargo install wasm-pack\ncargo add wasm-bindgen serde serde_json --target wasm32-wasip1\nwasm-pack build --target web --release\nwasm-pack build --target nodejs --release\n\n## Browser usage\nimport init, { process_data, calculate_stats } from '.\u002Fpkg\u002Fmy_wasm_project.js';\n\nawait init();\n\nconst result = process_data('Hello WebAssembly!');\nconst stats = calculate_stats([1,2,3,4,5,6,7,8,9,10]);\n\nconsole.log(result);\nconsole.log(stats.mean);\n\n## Host integration checklist\n- 保持 WASM API 小而明確。\n- boundary 只傳 plain data。\n- 量測序列化與呼叫成本。\n- DOM 與 UI 留在 host。\n- module 版本與 host app 分開管理。\n- module 與 host adapter 都要測。\n\n## Plugin checklist\n- 預設把 plugin 當 untrusted。\n- 只暴露必要 functions。\n- 不要讓 plugin 直接碰 host internals。\n- 在 boundary 驗證輸入。\n- 回傳 plain JSON 或 typed values。\n\n## 決策規則\n如果程式是 compute-heavy、portable、sandbox-worthy，就搬到 WASM。\n如果程式主要是 UI、orchestration、network chatter，就留在 host。\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這份我自己會真的拿去改。它沒有裝神秘，也沒有把 WASM 說成萬靈丹。重點就是幫你少踩幾個我踩過的坑：別過度使用、別把邊界搞太肥、別假裝 runtime 不存在。\u003C\u002Fp>\u003Cp>我這篇的拆解來源是 \u003Ca href=\"https:\u002F\u002Fdev.to\u002Fzny10289\u002Fwebassembly-in-2026-the-quiet-revolution-that-finally-delivered-8ff\">ZNY 的原文\u003C\u002Fa>。上面的架構、判斷方式、可抄模板是我重新整理過的版本；原始觀點有借力，但寫法和落點是我自己的。\u003C\u002Fp>","我拆解 WebAssembly 的實戰方法，整理成 browser、edge、plugin 都能直接套用的模板。","dev.to","https:\u002F\u002Fdev.to\u002Fzny10289\u002Fwebassembly-in-2026-the-quiet-revolution-that-finally-delivered-8ff",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779972510506-qf51.png","tools","zh","dbee4c5f-065b-4ec2-9f7d-ae624e5952a1",[17,18,19,20,21],"WebAssembly","WASI","Rust","plugin system","runtime",[23,24,25],"WASM 是執行目標，不是語言；先決定 host 與 boundary 再決定要不要搬。","最實用的場景是跨 runtime 的共享邏輯、sandbox 插件、以及 CPU-heavy 模組。","可直接套用的模板應該先定義使用條件、技術組合、專案結構與 host 邊界。",5,"2026-05-28T12:48:01.905726+00:00","2026-05-28T12:48:01.887+00:00","c3c88dd2-a940-438a-b359-0e5a24562273",{"tags":31,"relatedLang":41,"relatedPosts":45},[32,34,35,37,39],{"name":19,"slug":33},"rust",{"name":21,"slug":21},{"name":18,"slug":36},"wasi",{"name":20,"slug":38},"plugin-system",{"name":17,"slug":40},"webassembly",{"id":15,"slug":42,"title":43,"language":44},"wasm-in-2026-codebase-many-runtimes-en","Wasm in 2026 turns one codebase into many runtimes","en",[46,52,58,64,70,76],{"id":47,"slug":48,"title":49,"cover_image":50,"image_url":50,"created_at":51,"category":13},"63d8b456-ad6b-475e-86e9-d4677ca226aa","magenta-realtime-2-score-inside-daw-zh","Magenta RealTime 2 讓你在 DAW 裡即時改曲","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781046204038-8tox.png","2026-06-09T23:02:55.9651+00:00",{"id":53,"slug":54,"title":55,"cover_image":56,"image_url":56,"created_at":57,"category":13},"f60261ff-a42e-4cfb-9f90-97785e633289","open-source-ai-tools-beat-claude-paid-tiers-zh","開源 AI 工具在價值上已經贏過 Claude 付費方案","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781045266035-on7t.png","2026-06-09T22:47:20.195939+00:00",{"id":59,"slug":60,"title":61,"cover_image":62,"image_url":62,"created_at":63,"category":13},"8520cd4f-2531-4808-a95d-26f590239d7a","500-ai-agent-projects-show-where-agents-work-now-zh","500 個 AI agent 專案，現在能做什麼","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781033591132-c0nh.png","2026-06-09T19:32:37.03924+00:00",{"id":65,"slug":66,"title":67,"cover_image":68,"image_url":68,"created_at":69,"category":13},"c557ef1c-7fde-4c86-918e-4fb9680ee9df","chocolatey-go-package-policy-installs-zh","Chocolatey 的 Go 安裝變成政策","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781029110289-xkbh.png","2026-06-09T18:18:05.078435+00:00",{"id":71,"slug":72,"title":73,"cover_image":74,"image_url":74,"created_at":75,"category":13},"90b2df54-df6e-417d-9e16-91e9ad2f53d7","go-support-policy-turns-releases-into-a-checklist-zh","Go 支援政策把發版變清單","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781028200122-3m4u.png","2026-06-09T18:02:49.50176+00:00",{"id":77,"slug":78,"title":79,"cover_image":80,"image_url":80,"created_at":81,"category":13},"119c23c6-8ae7-4c4e-820e-1eba0730d702","rustdesk-self-hosting-secure-remote-access-zh","RustDesk 自架遠端存取部署指南","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781017373324-g7et.png","2026-06-09T15:02:24.118819+00:00",[83,88,93,98,103,108,113,118,123,128],{"id":84,"slug":85,"title":86,"created_at":87},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":89,"slug":90,"title":91,"created_at":92},"9b19ab54-edef-4dbd-9ce4-a51e4bae4ebb","mcp-in-2026-the-ai-tool-layer-teams-use-zh","2026 年 MCP：團隊真的在用的 AI 工具層","2026-03-26T08:01:46.589694+00:00",{"id":94,"slug":95,"title":96,"created_at":97},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":99,"slug":100,"title":101,"created_at":102},"05553086-6ed0-4758-81fd-6cab24b575e0","garry-tan-open-sources-claude-code-toolkit-zh","Garry Tan 開源 Claude Code 工具包","2026-03-26T08:26:20.068737+00:00",{"id":104,"slug":105,"title":106,"created_at":107},"042a73a2-18a2-433d-9e8f-9802b9559aac","github-ai-projects-to-watch-in-2026-zh","2026 必看 20 個 GitHub AI 專案","2026-03-26T08:28:09.619964+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":119,"slug":120,"title":121,"created_at":122},"bfdb467a-290f-4a80-b3a9-6f081afb6dff","aiml-2026-student-ai-ml-lab-repo-review-zh","AIML-2026：像課綱的學生實驗 Repo","2026-03-27T01:21:51.467798+00:00",{"id":124,"slug":125,"title":126,"created_at":127},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00",{"id":129,"slug":130,"title":131,"created_at":132},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]