goatdb 是一个专为现代应用设计的点对点数据库,它的核心理念是「本地优先」——数据首先存储在本地,然后在设备之间自动同步。对于需要离线工作能力、多端同步的应用来说,这是一个值得关注的选择。

项目概览

属性内容
GitHubgoatplatform/goatdb
Stars563
语言TypeScript
特点本地优先、P2P 同步、跨平台
最后更新5天前

它解决了什么问题

传统应用的数据架构通常是这样的:

  • 客户端完全依赖服务器,没有网络就无法使用
  • 数据存储在远程数据库,多端同步需要复杂的后端开发
  • 用户对自己的数据没有直接控制权

goatdb 提供了一种不同的思路:

  • 本地优先:数据首先存在于用户设备上,应用随时可用
  • 自动同步:设备之间通过 P2P 方式自动同步数据变更
  • 去中心化:不需要中央服务器,数据由用户自己掌控

这种模式特别适合笔记应用、任务管理、协作工具等场景。

核心特性

跨平台支持

goatdb 可以在多种环境中运行:

  • 浏览器:原生支持,无需插件
  • Deno:服务端和边缘环境
  • Node.js:传统后端场景

React 集成

内置 React hooks,让状态管理变得简单:

import { useDoc, useDB } from 'goatdb';

function TodoList() {
  const db = useDB();
  const todo = useDoc('/todos/123');
  
  const toggle = () => {
    todo.update(doc => ({
      ...doc,
      completed: !doc.completed
    }));
  };
  
  return (
    <div>
      <input 
        type="checkbox" 
        checked={todo.data.completed}
        onChange={toggle}
      />
      {todo.data.text}
    </div>
  );
}

类型安全

基于 TypeScript 的强类型设计:

interface Todo {
  text: string;
  completed: boolean;
  createdAt: number;
}

// 类型安全的文档操作
const todo = await db.get<Todo>('/todos/123');

冲突解决

内置多种冲突解决策略:

  • Last-Write-Wins:简单的覆盖策略
  • CRDT:自动合并并发修改
  • 自定义:根据业务需求实现特定逻辑

快速开始

安装

# Deno
deno add jsr:@goat/db

# npm
npm install @goat/db

基础用法

import { GoatDB } from '@goat/db';

// 创建数据库实例
const db = new GoatDB({
  path: './my-app-data',
  schema: {
    todo: {
      text: 'string',
      completed: 'boolean'
    }
  }
});

// 创建文档
const todo = await db.create('/todos', {
  text: '学习 goatdb',
  completed: false
});

// 读取文档
const data = await db.get('/todos/' + todo.id);

// 更新文档
await db.update('/todos/' + todo.id, {
  completed: true
});

同类产品对比

工具Stars特点
RxDB21k成熟生态,支持多种同步协议
WatermelonDB11kReact Native 友好,性能优秀
PouchDB8.5kCouchDB 生态,历史悠久
goatdb563新兴的本地优先方案,架构简洁

适用场景

适合使用 goatdb 的情况:

  • 需要离线优先的 Web 应用
  • 多端数据同步的个人工具
  • 不想维护复杂后端的独立开发者
  • 重视数据隐私的用户自控应用

不适合的情况:

  • 需要复杂权限控制的企业应用
  • 数据量极大的场景(尚无性能基准)
  • 需要 SQL 查询能力的应用

注意事项

  • 项目相对较新(2024年底创建),API 可能有变动
  • 社区规模还不大,遇到问题可能需要阅读源码
  • 生产环境使用前建议充分测试

总结

goatdb 代表了一种新的应用架构思路:数据属于用户,应用只是数据的视图。对于追求简洁架构、重视用户体验的开发者来说,它提供了一个值得探索的方向。

项目文档:https://goatdb.dev


属性内容
仓库https://github.com/goatplatform/goatdb
许可证MIT
语言TypeScript
维护者@ofriw