fireproof

GitHub
958 56 非常简单 1 次阅读 2天前Apache-2.0数据工具
AI 解读 由 AI 自动生成,仅供参考

Fireproof 是一款专为浏览器环境设计的轻量级嵌入式文档数据库,旨在让前端开发者轻松构建具备实时同步和离线优先能力的应用。它解决了传统开发中后端依赖重、数据同步复杂以及网络不稳定导致状态丢失等痛点,允许开发者将界面、数据和逻辑打包在单一文件中,实现“随处运行”。

这款工具特别适合前端工程师、全栈开发者以及希望快速原型验证的 AI 辅助编程用户。其核心亮点在于统一的 API 设计,不仅完美支持 React Hooks(如 useLiveQuery 和 useDocument),还能无缝运行于 Node.js、Deno、Bun 等多种 JavaScript 环境中。技术上,Fireproof 引入了类似 Git 的版本控制机制,通过哈希历史确保数据的因果一致性与账本完整性,并采用内容寻址的加密存储方式,既保障了数据安全,又使得通过普通对象存储服务进行同步变得简单高效。无论是构建需要即时协作的在线应用,还是处理包含图片等多媒体内容的复杂场景,Fireproof 都能提供流畅的开发体验,让数据在浏览器端即可实现安全、实时的持久化与同步。

使用场景

一位独立开发者正在构建一款支持多人实时协作的离线优先笔记应用,希望用户能在无网络环境下顺畅编辑,并在恢复连接后自动同步数据。

没有 fireproof 时

  • 架构复杂沉重:开发者需分别搭建前端本地存储(如 IndexedDB)和后端数据库,并编写大量样板代码处理两者间的数据同步逻辑。
  • 离线体验割裂:用户在断网时无法保存新内容或看到他人更新,必须手动处理“加载中”和“错误”状态,交互流程繁琐。
  • 协作冲突难解:实现多端实时协同需要引入复杂的 OT 或 CRDT 算法,极易出现数据覆盖或版本不一致的问题。
  • 部署维护成本高:应用依赖专用后端服务器和云数据库,无法简单打包成静态文件部署,增加了运维负担。

使用 fireproof 后

  • 全栈轻量嵌入:fireproof 将数据库直接运行在浏览器中,UI、数据和逻辑可打包进单一文件,无需单独的后端数据库服务。
  • 原生离线优先:凭借自动持久化和实时查询能力,用户在断网时可无缝读写数据,网络恢复后自动同步,彻底消除了加载与错误状态。
  • 内置一致性保障:fireproof 通过加密因果一致性和哈希历史机制,像 Git 一样自动处理版本冲突,确保多端协作时的数据完整性。
  • 随处运行部署:应用可轻松部署到任何静态托管平台甚至本地文件系统中,真正实现了“一次编写,随处运行”。

fireproof 让开发者仅需关注业务逻辑,即可低成本构建出具备企业级同步能力和极致离线体验的现代化 Web 应用。

运行环境要求

操作系统
  • 未说明
GPU

不需要 GPU

内存

未说明

依赖
notes该工具是一个基于 JavaScript/TypeScript 的嵌入式文档数据库,无需 Python 环境。支持在任何 JavaScript 环境中运行,包括浏览器、Node.js、Deno 和 Bun。在 Deno 环境下运行时需添加特定标志(如 --allow-read, --allow-write, --unstable-sloppy-imports)。无 GPU 需求,具体内存需求取决于应用规模但未在文档中明确说明。
python不适用
use-fireproof
@fireproof/core
fireproof hero image

快速开始

Fireproof logo Fireproof 数据库 API

包大小 构建状态

Fireproof 是一款轻量级的嵌入式文档数据库,具备加密的实时同步功能,专为简化浏览器应用开发而设计。它采用统一的 API,可在任何 JavaScript 环境中使用,既支持 React(配合 hooks),也作为独立的核心 API 运行。

将这些文档提供给 Point AI 的开发者。

核心特性

  • 应用随处运行: 将 UI、数据和逻辑打包到一个文件中。
  • 实时与离线优先: 自动持久化和实时查询,在浏览器中直接运行,无需加载或错误状态。
  • 统一 API: TypeScript 兼容 Deno、Bun、Node.js 和浏览器。
  • React Hooks: 利用 useLiveQueryuseDocument 实现实时协作。

Fireproof 通过哈希历史记录强制执行加密的因果一致性与账本完整性,提供类似 Git 的版本控制,并结合轻量级区块链式的验证机制。数据以内容寻址的加密 Blob 形式存储和复制,从而确保安全,并可轻松通过通用对象存储服务提供商进行同步。

安装

use-fireproof 包同时提供了核心 API 和 React hooks:

npm install use-fireproof

也可与 ⚡️ ESM.sh 配合使用:

import { useFireproof } from "https://esm.sh/use-fireproof";

或者在任意 JavaScript 环境中安装核心账本:

npm install @fireproof/core

还可以通过 HTML <script> 标签将账本添加到任何网页中(全局变量为 Fireproof):

<script src="https://cdn.jsdelivr.net/npm/@fireproof/core/dist/browser/fireproof.global.js"></script>

生成的解决方案可通过 ChatGPT Canvas、v0、bolt.new 或 Claude Artifacts 作为可运行的微型应用交付。只需将代码粘贴到此处即可部署带有 React 和 Tailwind 的单页应用:https://codepen.io/useFireproof/pen/MYgNYdx

⚛️ React 使用

在 LLM 代码生成场景中,推荐使用 React hooks 来操作 Fireproof:

import { useFireproof } from "use-fireproof";

function App() {
  const { database, useLiveQuery, useDocument } = useFireproof("my-ledger");

  // 使用 useDocument 创建新文档
  const { doc, merge, submit } = useDocument({ text: "" });

  // 按 _id 查询文档,按最新时间排序
  const { docs } = useLiveQuery("_id", { descending: true, limit: 100 });

  return (
    <div>
      <form onSubmit={submit}>
        <input value={doc.text} onChange={(e) => merge({ text: e.target.value })} placeholder="新文档" />
        <button type="submit">提交</button>
      </form>

      <h3>最近文档</h3>
      <ul>
        {docs.map((doc) => (
          <li key={doc._id}>{doc.text}</li>
        ))}
      </ul>
    </div>
  );
}

阅读 逐步 React 教程,快速上手;或查看 完整 LLM 文档,获取更多示例。

图片处理

Fireproof 让你在应用中轻松存储和展示图片。借助 _files 属性和 ImgFile 组件,可以处理文件存储与检索的所有复杂性:

// 从文件输入框中存储图片
function handleFileUpload(e) {
  if (e.target.files[0]) {
    merge({
      _files: { profilePic: e.target.files[0] },
      uploadedAt: new Date().toISOString(),
    });
  }
}

// 从文档中显示图片
function ImageDisplay({ doc }) {
  return (
    <div>
      {doc._files?.profilePic && (
        <ImgFile file={doc._files.profilePic} alt="头像" onLoad={() => console.log("图片已加载")} />
      )}
      <p>上传时间:{doc.uploadedAt}</p>
    </div>
  );
}

ImgFile 组件会自动处理 Fireproof 存储中的图片加载与显示,具备标准 <img> 元素的所有属性。更多深入示例请参阅我们的 llms-full.txt 文档。

JavaScript 核心 API

对于熟悉其他文档数据库的用户来说,Fireproof 的文档数据库 API 应该会非常直观:

import { fireproof } from "@fireproof/core";

const db = fireproof("music-app");

await db.put({ _id: "beyonce", name: "Beyoncé", hitSingles: 29 });

db.subscribe(async () => {
  const topArtists = await db.query("hitSingles", { range: [30, Infinity] });
  // 使用新的顶级艺人重新渲染 UI
});

const beyonceDoc = await db.get("beyonce");
beyonceDoc.hitSingles += 1;
await db.put(beyonceDoc);

为什么选择 Fireproof

与其他嵌入式数据库相比,Fireproof:

  • 具备网络感知能力、加密保护及多写者安全性;
  • 专为基于 CRDT 的实时协作而设计;
  • 为所有操作提供加密的因果完整性;
  • 面向 Web 构建,包体积小且无需 WebAssembly。

无需等待后端即可交付交互式体验。Fireproof 可在任何云、浏览器或边缘环境中运行,因此你的应用可以在任何地方访问数据。

使用场景

Fireproof 特别适用于以下场景:

  • AI 生成的应用和快速原型;
  • 协作编辑;
  • 离线优先与本地优先的应用;
  • 个性化与配置管理;
  • AI 助理的安全性。

借助 Fireproof,你可以先快速搭建应用,待准备就绪后再通过你选择的云服务进行同步,非常适合 LLM 代码生成场景和快速开发。

在我们的博客上获取最新的路线图更新 或加入我们的 Discord 进行协作。阅读文档了解更多关于 架构 的信息。

调试

要控制日志输出,可以使用 FP_DEBUG 环境变量,或在代码中设置调试级别:

FP_DEBUG='*' node myapp.js
logger.setDebug(...moduleNameList 或 '*')

如果你在浏览器中,可以使用以下代码来设置调试级别:

this[Symbol.for("FP_ENV")].set("FP_DEBUG", "*");
// vitest 传递环境变量
globalThis[Symbol.for("FP_PRESET_ENV")] = {
  FP_DEBUG: "*",
};

测试

要在所有项目中运行完整的测试套件(已测试的存储网关配置),请运行:

pnpm run test

要针对特定组件或模块运行测试,请使用以下命令模式:

pnpm run test -t '测试名称模式' 测试文件路径

例如,仅在一个项目中为 CRDT 模块运行特定测试:

FP_DEBUG='Loader,CRDTClock' pnpm run test --project file -t 'codec implict iv' crdt

对于 React 组件的测试,可以使用:

pnpm run test tests/react/[ComponentName].test.tsx

以测试 ImgFile 组件为例:

pnpm run test tests/react/ImgFile.test.tsx

日志格式化

可以通过设置 FP_FORMAT 来更改日志格式:

  • jsonice 会将日志输出为多行 JSON 格式。
  • yaml 会将日志输出为 YAML 格式。
  • json 会将日志输出为单行 JSON 格式(默认)。

KeyBag

如果在 FP_STORAGE_URL URL 中添加 extractKey 参数,并将其值设置为 _deprecated_internal_api,则可以绕过安全检查以提取密钥材料。这是默认配置,但使用此功能时会发出警告,并且未来计划实现更安全的密钥管理方案。

Deno

Fireproof 与 Deno 兼容。要在 Deno 中运行,需要添加以下标志:

目前尚未使用 Deno 运行测试——待办事项。

使用我们提供的 deno.json 文件可能会有些奇怪——待办事项是将 Fireproof 添加到 jsr 和 deno.land。

deno run --config node_modules/@fireproof/core/deno.json --allow-read --allow-write --allow-env --unstable-sloppy-imports ./node-test.ts

创建文档

请注意,这将直接推送。

pnpm run build:docs

感谢 🙏

Fireproof 是多年来网络社区中各位同仁共同努力的结晶。我甚至无法一一列举所有做出关键贡献的人。如果没有 npm、React 和 VS Code,这一切都会花费更多的时间。感谢所有通过 Apache CouchDB——最早的文档账本之一——支持我进入账本开发领域的人。我们在不可变数据结构方面的独特工作,得益于对 IPFSIPLD 以及 Filecoin APIs 多年来的深入思考。

感谢 Meno Abels,他担任了项目的首席工程师。Fireproof 正在迅速发展成为一个成熟的解决方案。

还要感谢 Alan Shaw 和 Mikeal Rogers,没有他们,这个项目根本不可能启动。核心的 Merkle 哈希树时钟基于 Alan 的 Pail,而仓库的历史可以追溯到该仓库的一个分支。Mikeal 编写了 prolly 树的实现

贡献

我们非常欢迎贡献。欢迎随时加入 Discord 上的讨论,所有人皆可参与。Discord 邀请链接

许可证

采用双许可协议,即 MIT 或 Apache 2.0

常见问题

相似工具推荐

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

scikit-learn

scikit-learn 是一个基于 Python 构建的开源机器学习库,依托于 SciPy、NumPy 等科学计算生态,旨在让机器学习变得简单高效。它提供了一套统一且简洁的接口,涵盖了从数据预处理、特征工程到模型训练、评估及选择的全流程工具,内置了包括线性回归、支持向量机、随机森林、聚类等在内的丰富经典算法。 对于希望快速验证想法或构建原型的数据科学家、研究人员以及 Python 开发者而言,scikit-learn 是不可或缺的基础设施。它有效解决了机器学习入门门槛高、算法实现复杂以及不同模型间调用方式不统一的痛点,让用户无需重复造轮子,只需几行代码即可调用成熟的算法解决分类、回归、聚类等实际问题。 其核心技术亮点在于高度一致的 API 设计风格,所有估算器(Estimator)均遵循相同的调用逻辑,极大地降低了学习成本并提升了代码的可读性与可维护性。此外,它还提供了强大的模型选择与评估工具,如交叉验证和网格搜索,帮助用户系统地优化模型性能。作为一个由全球志愿者共同维护的成熟项目,scikit-learn 以其稳定性、详尽的文档和活跃的社区支持,成为连接理论学习与工业级应用的最

65.6k|★☆☆☆☆|今天
开发框架其他数据工具

keras

Keras 是一个专为人类设计的深度学习框架,旨在让构建和训练神经网络变得简单直观。它解决了开发者在不同深度学习后端之间切换困难、模型开发效率低以及难以兼顾调试便捷性与运行性能的痛点。 无论是刚入门的学生、专注算法的研究人员,还是需要快速落地产品的工程师,都能通过 Keras 轻松上手。它支持计算机视觉、自然语言处理、音频分析及时间序列预测等多种任务。 Keras 3 的核心亮点在于其独特的“多后端”架构。用户只需编写一套代码,即可灵活选择 TensorFlow、JAX、PyTorch 或 OpenVINO 作为底层运行引擎。这一特性不仅保留了 Keras 一贯的高层易用性,还允许开发者根据需求自由选择:利用 JAX 或 PyTorch 的即时执行模式进行高效调试,或切换至速度最快的后端以获得最高 350% 的性能提升。此外,Keras 具备强大的扩展能力,能无缝从本地笔记本电脑扩展至大规模 GPU 或 TPU 集群,是连接原型开发与生产部署的理想桥梁。

63.9k|★★☆☆☆|昨天
开发框架数据工具其他

crawl4ai

Crawl4AI 是一款专为大语言模型(LLM)设计的开源网络爬虫与数据提取工具。它的核心使命是将纷繁复杂的网页内容转化为干净、结构化的 Markdown 格式,直接服务于检索增强生成(RAG)、智能体构建及各类数据管道,让 AI 能更轻松地“读懂”互联网。 传统爬虫往往面临反爬机制拦截、动态内容加载困难以及输出格式杂乱等痛点,导致后续数据处理成本高昂。Crawl4AI 通过内置自动化的三级反机器人检测、代理升级策略以及对 Shadow DOM 的深度支持,有效突破了这些障碍。它能智能移除同意弹窗,处理深层链接,并具备长任务崩溃恢复能力,确保数据采集的稳定与高效。 这款工具特别适合开发者、AI 研究人员及数据工程师使用。无论是需要为本地模型构建知识库,还是搭建大规模自动化信息采集流程,Crawl4AI 都提供了极高的可控性与灵活性。作为 GitHub 上备受瞩目的开源项目,它完全免费开放,无需繁琐的注册或昂贵的 API 费用,让用户能够专注于数据价值本身而非采集难题。

63.2k|★★☆☆☆|3天前
数据工具Agent

meilisearch

Meilisearch 是一个开源的极速搜索服务,专为现代应用和网站打造,开箱即用。它能帮助开发者快速集成高质量的搜索功能,无需复杂的配置或额外的数据预处理。传统搜索方案往往需要大量调优才能实现准确结果,而 Meilisearch 内置了拼写容错、同义词识别、即时响应等实用特性,并支持 AI 驱动的混合搜索(结合关键词与语义理解),显著提升用户查找信息的体验。 Meilisearch 特别适合 Web 开发者、产品团队或初创公司使用,尤其适用于需要快速上线搜索功能的场景,如电商网站、内容平台或 SaaS 应用。它提供简洁的 RESTful API 和多种语言 SDK,部署简单,资源占用低,本地开发或生产环境均可轻松运行。对于希望在不依赖大型云服务的前提下,为用户提供流畅、智能搜索体验的团队来说,Meilisearch 是一个高效且友好的选择。

57k|★★☆☆☆|今天
图像Agent数据工具

Made-With-ML

Made-With-ML 是一个面向实战的开源项目,旨在帮助开发者系统掌握从设计、开发到部署和迭代生产级机器学习应用的完整流程。它解决了许多人在学习机器学习时“会训练模型但不会上线”的痛点,强调将软件工程最佳实践与 ML 技术结合,构建可靠、可维护的端到端系统。 该项目特别适合三类人群:一是希望将模型真正落地的开发者(包括软件工程师、数据科学家);二是刚毕业、想补齐工业界所需技能的学生;三是需要理解技术边界以更好推动产品的技术管理者或产品经理。 Made-With-ML 的亮点在于注重第一性原理讲解,避免盲目调包;同时覆盖 MLOps 关键环节(如实验跟踪、模型测试、服务部署、CI/CD 等),并支持在 Python 生态内平滑扩展训练与推理任务,无需切换语言或复杂基础设施。课程内容结构清晰,配有详细代码示例和视频导览,兼顾理论深度与工程实用性。

47.1k|★★☆☆☆|今天
语言模型其他数据工具