Mark Ku's Blog
v1.0 開發中 · MIT 開源

open-pos

地端優先的餐飲 POS。點餐、結帳、出單、班別日結,全部跑在店裡那台電腦上 —— 網路斷了照樣做生意,資料永遠在你自己手上。

完全免費 · MIT離線可用 · 零月租
open-pos · 點餐畫面
點餐畫面。左邊是分類與品項,右邊是這一單的內容與合計;未稅與稅額同時顯示,因為那是發票上要對的兩個數字。

它幫你解決什麼

每一項都是台灣中小餐飲真的在付的代價,不是功能表上的字。

💸

月租與綁約

商用 POS 常常綁約三年、月租照收,想換系統時資料還拿不回來。open-pos 不收錢,資料是你硬碟上的一個 SQLite 檔,隨時可以帶走。

📴

網路一斷就收不了錢

雲端 POS 斷線等於停業。這套的主機就在店裡,網路只是拿來連平板與手機的,不是拿來收錢的。

🖨

出單機被驅動綁死

廠商 SDK 常常只有 Windows DLL,Linux 根本沒驅動。這套直接開 TCP 9100 送 ESC/POS 位元組,任何作業系統都一樣,也不用裝驅動程式。

🧮

金額差一元

金額一律用整數元,稅額依營業稅法施行細則的官方算法先算再倒扣銷售額,所以「銷售額 + 稅額 = 總額」永遠成立 —— 那是財政部的硬檢核。

🔍

月底對不上帳

每一筆動到錢的操作都寫進永不覆寫的稽核紀錄與流水帳。「誰在幾點把哪一單改成什麼」查得出來,結完帳再作廢也留得下痕跡。

💾

資料不見

用 SQLite 的線上一致快照做備份(不是複製檔案,那會拿到壞掉的檔),可以直接還原。備份太久沒跑,健康檢查會亮燈提醒。

已經能用的部分

v1.0 的目標不是功能多,是「一台電腦一台出單機就能開店」而且不會掉資料。

👆

觸控點餐

左菜單、右購物車,收銀員的動線一路往右不用回頭。品項磚刻意做大 —— 尖峰時間是站著用食指戳的。

💵

結帳與找零

現金給快捷鈔票鍵,找零算出來之後停在畫面上讓人照著數。金額只由後端算一次,螢幕與資料庫不會出現兩個數字。

🧾

商品維護

分類、品項、規格都在 App 裡改,不必碰資料庫。改價會留下稽核紀錄,訂單明細則存當時的品名與單價快照。

📶

區網多終端

同一支程式內建區網服務。之後的 KDS 與掃碼點餐走同一個後端,而收銀介面刻意不從區網提供 —— 連上店裡 Wi-Fi 的人載不到它。

長什麼樣子

介面是深色的:餐飲店的燈通常很亮,而收銀螢幕整天都亮著。

點餐畫面。左邊是分類與品項,右邊是這一單的內容與合計;未稅與稅額同時顯示,因為那是發票上要對的兩個數字。
點餐畫面。左邊是分類與品項,右邊是這一單的內容與合計;未稅與稅額同時顯示,因為那是發票上要對的兩個數字。
系統狀態。地端軟體最難處理的是「今天中午壞掉、現在又好了」這種回報,所以把版本、資料位置與健康檢查放在店家自己看得到的地方。
系統狀態。地端軟體最難處理的是「今天中午壞掉、現在又好了」這種回報,所以把版本、資料位置與健康檢查放在店家自己看得到的地方。

開始之前要知道的四件事

先把限制講清楚,比事後解釋誠實。

  1. 1

    現在還沒有安裝檔

    v1.0 還在開發中,目前要自己從原始碼建置。安裝檔會在 v1.0 發行時放上 GitHub Release,這一頁也會同步更新。

  2. 2

    單機架構,第二台是冷備

    一台主機、一份 SQLite、單一寫入者(台灣市佔最大的商用 POS 也是同構做法)。第二台電腦裝同一份程式平常不開,主機故障時插備份、按還原、接手,大約十分鐘。不做多主同步。

  3. 3

    資料不能放網路磁碟或雲端同步資料夾

    SQLite 的 WAL 在 SMB 網路磁碟上會靜默損毀,而 OneDrive/Dropbox 會各自複製資料庫的三個檔案。程式偵測到這兩種路徑會直接拒絕啟動,並告訴你該放哪裡。

  4. 4

    電子發票還沒做

    排在 v1.4,會先做財政部免費的自建 Turnkey。在那之前這套系統不開立電子發票。

技術選擇

全部是純 Rust 相依,不引入任何 C 函式庫 —— clone 下來就能跑測試,這是開源專案的第一印象。

桌面殼Tauri 2
後端Rust 2021 + sqlx
資料庫SQLite(WAL · 雙連線池)
前端React 18 + Vite 5 + Tailwind 3
出單機ESC/POS over TCP 9100
授權MIT

安裝

v1.0 發行後這裡會有三個平台的安裝檔。在那之前請從原始碼建置。

Windows

open-pos_x.y.z_x64-setup.exe

v1.0 發行後提供。這是主要的目標平台 —— 台灣餐飲店的收銀機幾乎都是 Windows。

macOS

open-pos_x.y.z_universal.dmg

v1.0 發行後提供。開發與試用可行,實際門市較少見。

Linux

open-pos_x.y.z_amd64.AppImage

v1.0 發行後提供。另有不含桌面介面的 open-posd,可以只跑區網服務。

還沒有安裝檔的期間,最快的試用方式是下面的建置指令;跑起來之後加上 --demo 會建一份示範菜單,不用先自己輸入商品。

從原始碼跑起來

  1. 1

    裝 Rust(stable)與 Node.js 20 以上。Windows 還需要 Microsoft C++ 建置工具。

  2. 2

    clone 專案,npm install 裝前端相依。

  3. 3

    npm run tauri dev 會同時起前端與 Rust 後端,開發模式的視窗就會跳出來。

  4. 4

    想先看看長什麼樣子:cargo run --bin open-posd -- --demo 會建一份 38 個品項的示範菜單,並在區網起一個服務。示範資料是冪等的,不會汙染你自己建的菜單。

第一次建置 Rust 相依要幾分鐘,之後就快了。

接下來做什麼

順序是照「哪一段的關鍵路徑握在自己手上」排的 —— 發票卡在每家店自己去申請,掃碼點餐卡在顧客的手機。

  • v1.0點餐 / 結帳 / 出單 / 班別日結 / 備份開發中
  • v1.1KDS 廚房顯示螢幕規劃中
  • v1.2報表強化與稽核查詢規劃中
  • v1.3顧客掃碼自助點餐規劃中
  • v1.4電子發票(自建 Turnkey)規劃中
  • v2.0PostgreSQL 支援規劃中

授權與界線

MIT,全開源,沒有社群版與商業版之分。但也請先看清楚不做什麼:不做雲端多店、不做會員點數、不做刷卡金流整合(避開 PCI 範圍)、不提供免費客製,硬體支援靠社群回報。這是一個人維護的專案,把邊界寫在前面才維護得下去。

看授權條款

自己的店,自己的資料

如果你也覺得「開一家店不應該先簽三年約」,歡迎來看看程式碼、回報你的出單機型號,或直接開一個 issue。

open-pos:地端優先的開源餐飲 POS(點餐 / 結帳 / 出單 / 日結) - Mark Ku's Blog