開源 · Apache-2.0

No Postman, Just GetCat!

以 Rust + GPUI 打造的原生跨平台 HTTP API 除錯工具

GPU 繪製 · 低資源占用 · 免帳號 · 資料全在本機 · No Electron, No Tauri, No WebView

macOS · Windows · Linux

左側建構請求,右側檢視 JSON 回應。
左側建構請求,右側檢視 JSON 回應。

克制,但該有的都有

下面寫的都是 GetCat 現在就做得到的事,沒有把路線圖當成功能列出來。

原生且輕快

GPU 繪製的原生視窗,不是 Electron / Tauri / WebView;macOS、Linux、Windows 三平台同一套介面,安裝檔約 16 MB。

大型回應不卡頓

串流接收、即時進度、隨時取消。主執行緒永遠不做 O(n) 的工作,幾百 MB 的 JSON 也不會把視窗拖住。

完整的請求建構

七種方法,Path / Query / Headers 三張參數表都有描述欄,Body 從 raw JSON 一路到固定長度串流的檔案上傳。

資料屬於你

不存歷史、不存回應、不上傳任何東西。已儲存的請求與設定都是排版過的 JSON 檔案,可手動編輯、可用 Git 管理。

隨手即存

每個 Tab 的草稿自動寫入磁碟、重新啟動後還原。Tab 順序、分欄方向、主題偏好也都會記住。

跟隨系統

主題與語言跟隨系統,也可以固定。自繪標題列讓三平台外觀一致。所有控制項都有無障礙名稱,可搭配螢幕閱讀器使用。

應用程式介面提供 English、简体中文、繁體中文、日本語 與 Français。

建構好請求,順手把程式碼帶走

塑造一個請求需要的東西都在,外加一鍵匯出 —— 匯出的就是 GetCat 真正送出去的那個請求。

七種方法

  • GET
  • POST
  • PUT
  • PATCH
  • DELETE
  • HEAD
  • OPTIONS

在 URL 任何位置寫 {name},它就會自動出現在 Path 參數表裡。

Body 與參數表

無 Body
用於 GET、HEAD、OPTIONS。
raw JSON / Text / XML
以 tree-sitter 為基礎的語法高亮,附一鍵格式化。
x-www-form-urlencoded
鍵值對,編碼交給它處理。
form-data
文字欄位與檔案欄位逐行切換。檔案以固定長度串流上傳,內容不進記憶體。
binary
整個檔案作為 Body,同樣是串流上傳。
Path 參數
由 URL 裡的 {name} 預留位置自動產生。
Query
接在 URL 後面,每一列都能個別啟用或停用。
Headers
另有一組全域預設請求標頭,可以逐條關閉。

產生程式碼

cURL、cURL(Windows)、Python requests,一鍵複製。產生器重用的就是傳送請求的那套組裝邏輯,所以你複製走的程式碼,就等於 GetCat 會送出的請求。

cURL
curl -X POST 'https://api.anthropic.com/v1/messages' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'anthropic-version: 2023-06-01' \
  -H 'Content-Type: application/json' \
  -d '{"model":"claude-opus-5","max_tokens":1024,"messages":[{"role":"user","content":"Hello"}]}'
Python (requests)
import requests

url = "https://api.anthropic.com/v1/messages"

payload = "{\"model\":\"claude-opus-5\",\"max_tokens\":1024,\"messages\":[{\"role\":\"user\",\"content\":\"Hello\"}]}"
headers = {
    "x-api-key": "YOUR_API_KEY",
    "anthropic-version": "2023-06-01",
    "Content-Type": "application/json"
}

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)

它刻意不產生 TLS、重新導向、逾時這些參數:那些是 GetCat 的設定,不屬於請求本身。

再大的回應也不卡視窗

回應怎麼顯示取決於它有多大 —— 主執行緒永遠不會被要求做 O(n) 的工作。

依大小分三級

級別條件如何顯示
高亮編輯器≤ 5 MB 且 ≤ 200,000 行完整語法高亮、行號、摺疊、回應內搜尋。
按行虛擬化≤ 64 MB純文字逐行繪製,只對畫面上看得到的部分做版面配置。
寫入磁碟後預覽> 64 MB寫入暫存檔,只預覽前 1 MiB 並附上摘要,可一鍵儲存或用系統程式開啟。

接收過程中: 即時顯示已接收位元組與總大小,約每 33 ms 更新一次,任何時候都能取消。

憑證健檢

Body 與 Headers 旁邊還有一個「憑證」頁籤:GetCat 會離線解析對端的葉憑證,把看到的內容列出來。

  • 主體
  • 簽發者
  • 生效時間
  • 到期時間
  • 別名 (SAN)
  • 序號
  • 簽章演算法
  • SHA-256 指紋

它會針對四件事發出警告

  • 已過期
  • 尚未生效 —— 請檢查系統時鐘
  • 主機名稱與憑證不符
  • 自簽憑證,沒有信任鏈

TLS 驗證預設關閉,為的是除錯本機自簽憑證的 API 時不必大費周章。請求照常送出,GetCat 仍會離線解析憑證,並就上面四種情況發出警告。在設定裡開啟驗證之後,有問題的憑證會直接中斷交握。

內建 AI API 範本 —— OpenAI 與 Anthropic 多模態請求主體寫法對照

點一下就得到一個填好 URL、認證標頭與請求主體的新 Tab。真正的價值在下面這組多模態寫法:三家 API 彼此互不相容。

九個範本

OpenAI Chat Completions、OpenAI Responses、Anthropic Messages,每個都有純文字、含圖片與串流三種變體。側欄另有 MCP 兩個協定世代的範本。

傳送前先替換 YOUR_API_KEY;也可以把金鑰存成變數、在這裡寫 {{API_KEY}},再標記為敏感值,介面上就會以遮罩顯示。

同一個圖片請求的三種寫法

OpenAI · Chat Completions

POST https://api.openai.com/v1/chat/completions

JSON
{
  "model": "gpt-5.6",
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "What is in this image?" },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://example.com/cat.jpg",
            "detail": "auto"
          }
        }
      ]
    }
  ],
  "max_completion_tokens": 1024
}

圖片區塊叫 image_url,而且 image_url 是個物件,裡面有 url 與 detail。token 上限欄位是 max_completion_tokens,不是 max_tokens。

OpenAI · Responses

POST https://api.openai.com/v1/responses

JSON
{
  "model": "gpt-5.6",
  "input": [
    {
      "role": "user",
      "content": [
        { "type": "input_text", "text": "What is in this image?" },
        {
          "type": "input_image",
          "image_url": "https://example.com/cat.jpg"
        }
      ]
    }
  ],
  "max_output_tokens": 1024
}

Responses 把內容區塊改名為 input_text 與 input_image,這裡的 image_url 直接是字串而不是物件。上限欄位是 max_output_tokens。

Anthropic · Messages

POST https://api.anthropic.com/v1/messages

JSON
{
  "model": "claude-opus-5",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image",
          "source": {
            "type": "url",
            "url": "https://example.com/cat.jpg"
          }
        },
        { "type": "text", "text": "What is in this image?" }
      ]
    }
  ]
}

Anthropic 用 image 加上一個 source 物件。max_tokens 是必填的,而且依官方建議,圖片區塊要排在文字區塊之前。

你的工作區,就是幾個檔案

沒有資料庫、沒有雲端、沒有帳號。GetCat 記住的每一樣東西都是一個能開啟、能修改、能提交的 JSON 檔案。

它會寫入什麼

workspace.json
Tab 順序、側欄狀態、分欄方向、主題偏好。
requests/<ulid>.json
一個已儲存的請求一個檔案。
drafts/<tab-id>.json
一個 Tab 一份草稿,重新啟動後還原。
settings.json
應用程式設定。
variables.json
全域、分類與環境變數。敏感值只在介面上以遮罩顯示,檔案裡仍是明文。

存在哪裡

平台目錄
macOS~/Library/Application Support/GetCat/
Linux$XDG_DATA_HOME/getcat/
Windows%APPDATA%\GetCat\data\

快速鍵

操作macOSWindows / Linux
傳送⌘ EnterCtrl Enter
新增 Tab⌘ TCtrl T
關閉 Tab⌘ WCtrl W
收合側欄⌘ BCtrl B
儲存請求⌘ SCtrl S
回應內搜尋⌘ FCtrl F
設定⌘ ,Ctrl ,

寫入是不可分割的 —— 先寫暫存檔再取代,當機也不會留下寫到一半的檔案。解析失敗的檔案會被改名為 .corrupt-<時間> 並略過。Authorization 這類 Header 以明文儲存,與 Postman、Insomnia 的本機資料庫一致,Unix 上檔案權限為 0600。

GetCat 刻意不做的事

把這份清單放在這裡,是為了讓你在下載之前就知道,也免得有人拿別的工具來類比:

歷史記錄 · JavaScript 請求前指令碼與測試指令碼 · 獨立的 Auth 面板 · Cookie 管理 · 資料夾樹 · GraphQL、WebSocket、gRPC · 團隊同步與雲端帳號

下載

所有版本都在 GitHub Releases 上,另有中國鏡像。這裡的連結永遠指向最新版。

macOS

Windows

Linux

安裝

macOS

已簽署並經過公證,拖進「應用程式」即可。

Windows

MSI 安裝到目前使用者的目錄,不需要系統管理員權限,可從開始功能表啟動。免安裝版 exe 放在哪裡都能執行,不寫入登錄檔。

Linux

解壓縮後把執行檔放進 PATH。再加一個 .desktop 檔就有啟動器了 —— 指令見下方。

Linux 安裝
tar -xzf GetCat-linux-x64.tar.gz
install -Dm755 getcat ~/.local/bin/getcat
mkdir -p ~/.local/share/applications
cat > ~/.local/share/applications/getcat.desktop <<EOF
[Desktop Entry]
Type=Application
Name=GetCat
Exec=$HOME/.local/bin/getcat
Categories=Development;
EOF

Windows 的兩個安裝檔還沒有程式碼簽章,第一次執行時 SmartScreen 會擋一下:點「其他資訊」→「仍要執行」。

更新

GetCat 在啟動 5 秒後向 GitHub Releases 查詢一次,絕不自動下載任何東西。你選擇更新時,安裝檔會先經過 SHA-256 與 minisign 簽章雙重驗證,通過之後才會安裝。

所有版本與更新記錄

系統需求

GetCat 用 GPU 繪製介面,所以圖形堆疊比 CPU 更要緊。

macOS

macOS 11 Big Sur 以上,Apple Silicon 或 Intel 皆可。dmg 已簽署並經過公證。

Windows

Windows 10 1803(2018 年 4 月更新)以上,或 Windows 11。介面使用 Direct3D 11,feature level 10.1 起 —— 2010 年前後的顯示卡就夠用,不要求 DirectX 12。

Linux

2022 年以後的主流桌面發行版:Ubuntu 22.04+、Debian 12+、Fedora 36+、Linux Mint 21+、openSUSE Leap 15.6+,以及 Arch 這類滾動發行版。最低需求是 glibc 2.35,所以 Ubuntu 20.04、Debian 11 與 RHEL 9 系列都無法執行。

Linux:黑畫面就是 Vulkan 的問題

介面使用 Vulkan。如果視窗是黑的,先用 vulkaninfo --summary 確認驅動程式,再依顯示卡安裝對應的套件:

顯示卡套件
Mesamesa-vulkan-drivers
Intelvulkan-intel
AMDvulkan-radeon
NVIDIAnvidia-driver

nouveau 不支援 Vulkan —— NVIDIA 顯示卡需要專有驅動程式。在虛擬機器裡會退回 lavapipe 軟體繪製,能用但很慢。

常見問題

GetCat 和 Postman 有什麼不同?

GetCat 是一個克制的子集。沒有帳號、沒有雲端同步、沒有 collection、沒有指令碼 —— 變數、環境與回應斷言都有,但是在表格裡填寫,而不是寫 JavaScript。換來的是一個 16 MB 的原生應用程式:秒開、每個位元組都留在你的電腦上、面對超大型回應也不會卡死。如果你需要團隊協作或測試套件,Postman 和 Insomnia 仍然是更合適的工具。

為什麼不用 Electron 或 Tauri?

GetCat 是用 Rust 寫的,以 GPUI 為基礎 —— 也就是 Zed 編輯器用的那套 UI 框架。視窗由 GPU 直接繪製,而不是交給瀏覽器引擎,這既是安裝檔能壓到 16 MB 的原因,也是幾百 MB 資料湧入時回應區還能捲動的原因。網路在 Tokio runtime 上執行,結果透過 channel 回到 UI 執行緒,主執行緒永遠不做 O(n) 的工作。

我的請求和 API Key 存在哪裡?會上傳嗎?

不會上傳 —— 沒有遙測、沒有帳號、沒有同步。已儲存的請求、草稿、設定和變數都是平台資料目錄裡排版過的 JSON 檔案,你可以手動編輯,也可以放進 Git。Authorization 這類 Header 值以及敏感變數(只在介面上以遮罩顯示)都以明文儲存,與 Postman、Insomnia 的本機資料庫做法一致,Unix 上檔案權限是 0600。

為什麼預設關閉 TLS 憑證驗證?

為的是讓「除錯一個使用自簽憑證的本機 API」這件事直接可用,而這在開發時是常態。請求照常送出,同時 GetCat 仍會離線解析對端憑證,並在憑證已過期、尚未生效、主機名稱不符,或是自簽且沒有信任鏈時發出警告。在設定裡開啟驗證就恢復嚴格行為:有問題的憑證會直接中斷交握。

支援環境變數、測試斷言或團隊協作嗎?

變數與斷言支援,團隊協作不支援。變數分全域、分類、環境三層,請求裡寫 {{var}} 就會替換,也有 {{$timestamp}} 這類動態變數。前後置操作在傳送前設定變數,回應後把欄位擷取到變數、對狀態碼 / 回應標頭 / JSON 做斷言 —— 都在表格裡填寫,不用寫指令碼。可以匯入匯出 Postman environment,敏感變數在介面上以遮罩顯示。仍然刻意留白的是指令碼、Cookie 管理、資料夾樹和共用工作區,為了讓應用程式保持小巧、可預期。

Linux 上視窗是黑的,怎麼辦?

介面使用 Vulkan,黑畫面幾乎總是代表缺少 Vulkan 驅動程式。先執行 vulkaninfo --summary 確認,再依顯示卡安裝 mesa-vulkan-drivers、vulkan-intel 或 vulkan-radeon。NVIDIA 顯示卡需要專有驅動程式 —— nouveau 不支援 Vulkan。在虛擬機器裡會退回 lavapipe 軟體繪製。

支援 GraphQL / WebSocket / gRPC 嗎?

不支援。GetCat 只講 HTTP。你當然可以把 GraphQL 查詢當成 JSON Body 用 POST 送出去,但沒有 schema 自我檢查、沒有訂閱支援,也沒有針對這些協定的介面。

要多少錢?用什麼授權?

免費且開源,Apache-2.0。沒有付費方案、沒有帳號、沒有任何需要註冊的東西。原始碼、issue 和每一個安裝檔都在 GitHub 上。