# boki **Repository Path**: edrin/boki ## Basic Information - **Project Name**: boki - **Description**: BOKI 簿记 — 离线优先的开源记账软件:复式记账、多公司隔离、插件化架构、SQLite 单文件,数据不出机器,断网也能用 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: https://edrin09.github.io/boki/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-22 - **Last Updated**: 2026-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
你的数据,永远只属于你 · 复式记账内核 · 插件化 · 全离线运行
官网站点 · 码云镜像 · 快速开始 · 离线能力 · 安全边界 · 插件仓库 · 商业支持 · 赞助
--- ## BOKI 是什么 > **你的数据,永远只属于你。** BOKI 是一套**离线优先**的开源财务软件:前端 Vue 3 + 后端 NestJS + SQLite 单文件数据库,单命令启动,开箱即用。 在云端数据泄露频发的今天,财务隐私不该被妥协。BOKI 把数据主权 100% 交还给你:装在你自己的机器上,跑在你自己的内网里——**没有云端、没有第三方 SDK 回传、没有任何埋点与遥测**。 无论你是**小微企业主、个体工商户、代理记账公司**,还是对**私有化部署、数据不出境**有硬性要求的团队,BOKI 都可以作为**免费记账软件**替代商业财务系统:一套系统覆盖日常记账、票据识别、工资报销、财务报表全流程,**离线可用、断网可用、数据永远在自己手里**。 内核只保留记账必需的**复式记账引擎**(科目、凭证、期初、公司上下文),其余能力全部**插件化**——想要什么功能装什么插件,不装的插件在界面里不留一丝痕迹。 **数据、语音识别、大模型全部可以离线运行**:SQLite 单文件 + 本地 OCR + 本地流式语音识别 + 可选本地大模型,**断网也能用,数据不出机器**。 - 记账方式:**复式记账**(借贷必相等,后端强校验) - 报表:资产负债表、利润表(本期 + 本年累计)、票据台账、现金流量简表、费用结构分析 - 权限:JWT 登录 + RBAC(菜单级 + 操作级) - 多公司:一个账号可管理多家记账公司,数据完全隔离,顶部一键切换 - 数据库:SQLite 单文件,零配置,支持一键备份/恢复 --- ## 🛡 为什么选择 BOKI | | 理由 | 具体是什么 | |:--|:--|:--| | 🚫 | **绝对离线,拒绝云端** | 安装包自带运行时,**不联网也能安装、启动、记账**;没有埋点、没有遥测、没有后台上传,从物理层面收窄泄露面 | | 🗄 | **数据主权在你手里** | 全部账务数据就是本机一个 `financial.db`:整目录拷走、直接备份、离线搬到另一台机器,**不必向任何服务商申请导出** | | ⚡ | **快,因为不绕远路** | 本地数据库直连,没有云端 API 往返;断网环境下依然是毫秒级的记账与查询 | | 📊 | **报表够用且可审计** | 资产负债表 / 利润表 / 科目余额表 / 试算平衡表 / 票据台账 / 现金流简表;借贷必相等由前后端双重强校验,已审核凭证禁止改动 | | 🧩 | **不会被功能绑架** | 只用内核也能跑完整闭环(登录 → 建账 → 记账 → 出表);需要什么装插件,不用就卸载,界面里不留痕迹 | --- ## 🔌 全离线能力 | 能力 | 离线方式 | 说明 | |:--|:--|:--| | **数据离线** | SQLite 单文件 | 所有账务数据落在本机单文件(WAL 模式),一键备份 / 恢复;**无任何外部服务依赖**,财务数据不出机器 | | **语音识别离线** | sherpa-onnx 本地推理 | 流式中文 ASR(zipformer-zh int8,约 160MB,`npm run models:fetch-asr`),**完全本地解码,音频不上传** | | **大模型可选离线** | Ollama / llama.cpp / vLLM | AI 插件内置本地大模型预设(OpenAI 兼容协议、**无需 API Key**):Ollama(`qwen2.5:1.5b-instruct`)、llama.cpp server、vLLM;也可随时切换 DeepSeek / 通义千问 / Kimi / 智谱 / OpenAI 等云端模型 | > 离线模型缺失时服务照常启动(自动降级),仅「识别 / 票据上传 / 证件建档 / 语音」相关功能提示模型未就绪;`GET /api/ocr/status`、`/api/voice/status` 可查看就绪状态。 --- ## 🔐 安全边界 BOKI 的原则是**先把边界画清楚,再把承诺写明白**。下表是当前代码的真实状态——做到的写做到,没做的明确标出来。 **已经做到** | 层面 | 实现 | |:--|:--| | 部署边界 | 单机 / 内网自部署,前后端同源单端口;无云端依赖、无第三方 SDK 回传、代码中不含埋点与遥测 | | 口令存储 | `bcrypt` 加盐散列,不保存明文(`backend/src/common/utils/crypto.util.ts`);JWT 短期令牌由本机签发 | | 授权体系 | RBAC:权限点覆盖菜单级 + 操作级,前端指令(`v-permission`)+ 后端守卫双重校验 | | 多公司隔离 | 所有业务表带 `company_id`,仓储层强制追加过滤;令牌内 `companyId` 由服务端签名保证不可伪造 | | 操作审计 | 登录、增删改、审核等动作本地留存操作日志,可查询、可清理 | | 数据可迁移 | 全部数据即一个 `financial.db`,支持一键备份 / 下载 / 恢复,可离线搬到另一台机器 | | 传输加固 | 单端口同源即可用;对公网暴露时建议前置 Nginx + TLS(部署侧配置,仓库不含证书) | **还没做到(如实标注,不写话术)** | 缺口 | 现状 | |:--|:--| | 数据库加密 | `financial.db` 当前是**明文文件**——拿到文件即可用任意 SQLite 工具直读 | | 密钥 / 主密码登录 | 尚无「免用户名口令、单 Key 解锁」与零知识(Zero-Knowledge)主密码体系 | | 敏感字段加密 | 金额、往来单位等字段未做列级加密 | | MFA 二次验证 | 当前仅单因子口令 | | 备份加密 | 备份出的 `.db` 文件本身未加密,需自行放到加密盘 / 加密压缩包 | > 本项目**不会**宣称「银行级 AES-256 零知识加密」——**没做到的就不写进文档**。数据库加密与密钥登录已列入下方「路线图 · 安全与加密」,计划以**插件**形式交付:装与不装由你决定,不装就保持现在的零配置体验。 --- ## ✨ 核心特性 | | 特性 | 说明 | |:--|:--|:--| | 📒 | **复式记账强校验** | 每张凭证至少 2 条分录,借方合计 = 贷方合计,前后端双重校验,不平衡无法保存;明细科目限制、辅助核算必填 | | 🧩 | **插件化架构** | 后端业务模块 29 → 8,前端页面 45 → 18;14 个官方插件覆盖档案/资金/薪酬/票据/报表/AI/语音/IAM/多公司,系统内一键安装、停用、卸载 | | 🔒 | **离线私有化** | 数据 / 语音 / 大模型三层全离线:SQLite 单文件 + 本地 OCR(PP-OCRv4)+ 本地流式语音识别(sherpa-onnx)+ 可选本地大模型(Ollama / llama.cpp / vLLM),内网/断网环境完整可用,财务数据不出机器 | | 🔐 | **安全边界透明** | 认证、授权、多公司隔离、审计做到什么、还缺什么(数据库加密 / 密钥登录 / MFA),README 逐项标注,不写「银行级加密」话术 | | 🏢 | **多公司隔离** | 所有业务表带 `company_id`,仓储层自动追加过滤;令牌内 `companyId` 由服务端签名保证不可伪造 | | 🧾 | **票据智能记账** | 上传电子发票 PDF / 扫描件,自动解析类型、金额、税额、购销方;sha256 去重、归类规则、待确认工作台,确认后自动生成凭证 | | 🤖 | **AI 会计员** | AI 插件内置 Ollama / llama.cpp / vLLM 本地大模型预设(OpenAI 兼容、无需 API Key),也可切换云端模型;语音插件本地流式 ASR,自然语言即问即答 | | 💻 | **一键安装包** | Electron 桌面壳 + NestJS sidecar,产出单个 `BOKI-Setup.exe`;未装 Node、未装数据库、不能联网的 Windows 机器装完即用,同机即局域网服务器 | | 📊 | **报表与导出** | 资产负债表 / 利润表 / 科目余额表 / 试算平衡表 / 票据台账 / 月度报表包,支持导出 Excel | --- ## 🚀 快速开始 ### 方式一:免环境安装包(推荐,内部办公场景) 产出一个 `BOKI-Setup-1.0.0.exe`,在**未装 Node、未装数据库、不能联网**的 Windows 机器上装完即用;那台机器同时充当局域网服务器,同事用浏览器访问即可。 ```bash cd desktop npm run pack # 产物:desktop/release/BOKI-Setup-1.0.0.exe ``` 架构:Electron 壳负责窗口与托盘,后端以 `node.exe` 子进程方式拉起(sidecar),后端同时托管前端静态文件,**前后端同源、单端口 9300**,不需要 Nginx、不需要处理跨域。数据落在 `C:\ProgramData\BOKI\`(安装目录对普通用户只读,SQLite 必须写可写目录)。 ### 方式二:源码运行(开发 / 自备服务器) 需要两个终端。 **终端 1 — 后端(端口 3000)** ```bash cd backend npm install copy .env.example .env # Windows;macOS/Linux 用 cp npm run start:dev ``` 首次启动会自动创建 `backend/data/financial.db`,并写入种子数据:1 家默认记账公司、80+ 条权限、4 个角色、75 个中文会计科目、4 个默认用户。 离线模型首次使用前需下载(OCR 约 25MB、流式语音识别约 160MB,均放 `backend/models/`): ```bash npm run models:fetch # 下载 OCR 模型到 models/ocr/ npm run models:fetch-asr # 下载流式 ASR 模型到 models/asr/ ``` > 模型缺失时服务仍可正常启动(自动降级),仅「识别 / 票据上传 / 证件建档 / 语音」相关功能会提示模型未就绪;`GET /api/ocr/status`、`/api/voice/status` 可查看就绪状态。AI 大模型同样可选完全本地部署(Ollama 等),无需下载到本仓库。 **终端 2 — 前端(端口 5173)** ```bash cd frontend npm install npm run dev ``` 访问BOKI — 你的数据,永远只属于你。