糯栗记账
技术特性

轻量、透明、跑在你自己的机器上

纯后端服务端渲染,零前端框架依赖,一条命令即可启动。

技术栈

选择最少、依赖最轻的一套组合,装得快、跑得稳、好维护。

Node.js ≥ 22

零原生依赖,纯 JS 单进程

SQLite

node:sqlite 内置驱动,数据自持

EJS SSR

服务端渲染,低带宽也流畅

飞牛 fnOS

fpk 应用包,桌面内嵌运行

Express + EJS

成熟轻量的服务端渲染,零前端框架、零构建步骤。

SVG 图表

报表在服务端生成内联 SVG,无需前端图表库,加载即所见。

架构与数据

一个进程、一个数据库文件,就能撑起完整的记账系统。

安全设计

自托管不等于将就安全。认证、会话、权限、传输各环节都有对应防护。

口令与哈希

密码用 scrypt 加盐哈希存储,比对采用恒定时间比较,抵御时序侧信道。

会话与 CSRF

登录会话防固定(重新生成 ID),写操作校验 CSRF 令牌,Cookie SameSite=Lax。

登录防护

按账号 + IP 双维度限流,连续失败达阈值即锁定,降低暴力破解风险。

权限分级

只读 / 成员 / 管理员分层,写账本、管成员、进后台各自独立鉴权。

安全响应头

内置 CSP、X-Frame-Options、X-Content-Type 等响应头,为渲染层加一道纵深防御。

运维可控

会话密钥缺省自动生成并持久化,升级走固定命令白名单,减少误操作面。

开放 API

令牌鉴权的 REST 接口,脚本、自动化、第三方工具都能随手接入。

能力一览
  • ✓ 写入一笔交易
  • ✓ 查询最近流水
  • ✓ 调用 AI 识别账单
  • ✓ 获取交易附件
  • ✓ 令牌连通性自检
调用示例
# 用访问令牌写入一笔支出 curl -X POST https://你的域名/api/transactions \ -H "Authorization: Bearer <令牌>" \ -H "Content-Type: application/json" \ -d '{"type":"expense","amount":35.0, "category":"餐饮","note":"午饭"}'

访问令牌在服务端仅以 SHA-256 摘要存储,明文不落库,可随时吊销。

部署方式

从本地到 NAS 到容器,选你顺手的一种。

Docker 镜像 / docker-compose 飞牛 fnOS fpk 应用包,桌面内嵌 NAS / 服务器 start.sh 一键启动 宝塔 Node 项目托管 本地 node server.js 直接跑
要求:Node.js ≥ 22

使用 Node 内置的 node:sqlite,无需安装任何原生依赖。数据与上传文件都在数据目录内,备份只需拷走一个 .db 文件与 uploads 目录。

体验与兼容

糯栗

部署一套,长期受用

数据文件在你自己的设备上,备份、迁移、导出都随手可控。