Skip to content

Repository files navigation

⚡ Pulse

Your self-hosted information pulse.

把 RSS、API、网页、Webhook 和本地文件汇聚成一个可搜索、可自动整理的个人阅读中枢。

CI GHCR Go React PostgreSQL


Pulse 是面向单用户、本机或局域网部署的信息阅读中枢。它将不同来源的内容统一为可搜索、可过滤、可阅读的 Entry,并使用结构化规则自动整理你的信息流。所有状态保存在自己的 PostgreSQL 中。

Why Pulse?

  • 📡 统一摄取 — RSS、API、网页、Webhook、手工条目和本地文件进入同一条可靠管道。
  • 🧭 高效阅读 — 紧凑信息流、来源筛选、原位展开、全文搜索和批量已读。
  • 🪄 自动整理 — 使用结构化规则添加标签、收藏、隐藏、稍后读或发送通知。
  • 🛡️ 数据自有 — 单用户、自托管;来源凭据加密存储,主密钥始终位于数据库之外。
  • 🧱 简单部署 — 一个 Pulse 镜像加一个 PostgreSQL,即可运行完整系统。

Features

  • Ingest anything — RSS/Atom/JSON Feed、JSON API、Static HTML、Webhook、手工条目、本地文件、阅读批注,统一为 Entry。
  • Read on your terms — 收件箱、Folder、标签、持久化 View;已读、收藏、隐藏、稍后读、笔记;PostgreSQL 全文与模糊搜索;OPML / 脱敏配置 / Markdown 导出。
  • Cluster across sources — 同一新闻的多个来源自动聚合成一条 Story;跨源合并需启用 Ollama embedding(默认关闭),配置见部署与运维
  • AI catch-up — 用户主动生成 StorySummary 或标题级未读追更 Digest;支持 OpenAI-compatible Provider、DeepSeek、OpenRouter、Qwen 与 Ollama,结果保留可回到来源 Story 的引用。

Quick Start

git clone https://github.com/catwenlabs/pulse.git
cd pulse
cp .env.example .env
# 编辑 .env,至少设置 PULSE_MASTER_KEY;需要 AI 时再设置 PULSE_AI_*。
docker compose up -d
curl --fail http://localhost:8080/healthz

打开 http://localhost:8080,健康检查位于 /healthz。部署定义见仓库中的 compose.yaml;镜像标签与生产建议见部署与运维

Important

PULSE_MASTER_KEY 用于加密来源凭据,请保存在服务器的私密环境文件或 Secret 管理器中——丢失后无法解密已保存的认证信息。未配置时仍可使用无凭据来源,但 Pulse 会拒绝保存 Token、Cookie、密码或认证 Header。

Warning

Pulse 当前无内置用户认证,默认端口仅绑定 127.0.0.1不要直接暴露到公网;需要远程访问请走可信 VPN 或带认证的反向代理。

How It Works

flowchart LR
    S["RSS · API · Web · Webhook · Files"] --> A["Unified Ingestion"]
    A --> N["Normalize & Deduplicate"]
    N --> R["Rules"]
    R --> DB[("PostgreSQL")]
    DB --> UI["Reader · Search · Views"]
Loading

Pulse 采用模块化单体架构,PostgreSQL 同时承载领域数据、任务队列、Lease、Checkpoint 和 Effect Outbox。每次成功摄取会原子提交 Entry、规则结果、Effect 与 Checkpoint,失败不会破坏已有数据或推进外部进度。

阅读完整的架构说明领域语言架构决策记录

Concepts

Source 是一项持久化的信息来源配置(一个 Feed、一个 API、一个网页入口或一个收藏集合),而不是一篇文章。来源类型与创建方式详见 Sources

Usage

  • 订阅 RSS / API / 网页,或手工收藏网页、导入阅读批注 —— 详见使用指南
  • 网页收藏通过 Bookmarklet 完成,无需浏览器扩展。

Configuration

关键环境变量(完整列表与 Story 语义聚合配置见部署与运维):

变量 默认值 用途
PULSE_DATABASE_URL postgres://pulse:pulse@postgres:5432/pulse?sslmode=disable PostgreSQL 连接地址
PULSE_HTTP_ADDR 127.0.0.1:8080(容器内需设为 :8080 HTTP 监听地址
PULSE_MASTER_KEY 来源凭据主密钥(Base64,32 字节)
PULSE_ROLES web,scheduler,worker,effect-worker 进程启用的运行角色
PULSE_EMBEDDING_PROVIDER disabled Story 语义聚合;可设为 ollama
PULSE_AI_PROVIDER disabled 全局 AI Provider;可设为 openai-compatibleollama
PULSE_AI_MAX_ACTIVE_JOBS 4 全局 AI Provider 的排队、运行和重试 Job 上限

Local Development

一键启动 PostgreSQL、Go 后端和带 HMR 的 Vite 前端。Makefile 只读取根目录 .env;缺少时使用 .env.example 模板。由于 Go 后端运行在宿主机上,make dev-api 会为本机地址、开发数据库和本地导入目录应用开发默认值;需要时可用 PULSE_* Make 参数临时覆盖:

make dev

访问 http://localhost:5173/api/healthz 会代理到本机 8080。也可分别启动:make dev-db-upmake dev-apimake dev-web(首次需 make dev-web-install);停止开发库用 make dev-db-down。AI 配置等应用配置统一放在 .env 中,也可用 make dev-api PULSE_DATABASE_URL=... 临时覆盖本机开发数据库地址。

开发数据库是持久卷(pulse-postgres-v17),make dev-db-down 不会删除数据。需要重置测试订阅时,可在界面「添加信息源 → 来源类型 → OPML 批量导入」手动导入 scripts/dev-sources.opml(已存在的订阅会自动跳过,不会被覆盖)。

参与开发或使用 AI 编码 Agent 前,请阅读 AGENTS.md

Deployment & Operations

部署、升级、备份恢复、导出与完整配置详见部署与运维。升级示例:

make backup
git pull --ff-only
docker compose pull pulse
docker compose up -d --remove-orphans

Verification

make test
make test-race
make vet
make compose-config
make e2e   # RSS 浏览器端到端,需先启动完整应用

GitHub Actions 会在 Pull Request 和 main 推送时执行后端、前端与容器验证;全部通过后才发布 GHCR 镜像。

Documentation


Built with Go, React and PostgreSQL.

About

A self-hosted information hub that turns RSS, APIs, web pages, webhooks, and local files into one searchable reading stream.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages