gun

gun

开源去中心化实时数据库 支持加密与离线优先

GUN是开源的去中心化实时数据库系统,具备端到端加密和离线优先功能。它支持多人实时同步、图数据存储和本地优先等特性,适用于构建去中心化应用。GUN生态系统提供从CRDT冲突解决到加密安全、存储序列化和网络路由等多方面的工具。Internet Archive等多个项目已采用GUN,它还可用于构建Zoom、Reddit等主流应用的去中心化替代版本。

GUN分布式数据库实时同步加密应用开源Github开源项目
<p id="readme"><a href="https://gun.eco/"><img width="40%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/699e4a31-6f74-4887-9a3d-a7330ccbd4db.svg"/></a><img width="50%" align="right" vspace="25" src="https://yellow-cdn.veclightyear.com/0a4dffa0/a5d1dac6-89a3-4928-8d23-3405ee42597e.gif"/></p>

Build Gitter

GUN是一个生态系统,提供了一系列工具,让你能够构建社区运营加密应用 - 类似于开源版的Firebase或去中心化的Dropbox。

互联网档案馆数百个其他应用都在生产环境中运行GUN。GUN还是Twitter的bluesky计划的一部分!

  • 默认支持多人操作,实现实时P2P状态同步!
  • 图数据让你可以使用键值对、表格、文档、视频等多种数据形式!
  • 本地优先、离线支持,去中心化且端到端加密。

基于GUN的ZoomRedditInstagramSlackYouTubeStripeWikipedia、Facebook Horizon等去中心化替代品已经每天推送了数TB的P2P流量。我们是一个友好的社区,正在创造一个自由有趣的未来

<table> <tr> <a href="https://youtu.be/s_m16-w6bBI"><img width="31%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/18206df1-445b-4e40-b5ed-5863e867e5f0.gif" title="3D VR"/></a> <a href="https://github.com/cstefanache/cstefanache.github.io/blob/06697003449e4fc531fd32ee068bab532976f47b/_posts/2016-08-02-gun-db-artificial-knowledge-sharing.md"><img width="31%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/48e9161b-beca-421b-9743-99bbfdc4bec8.gif" title="AI/ML"/></a> <a href="http://gps.gunDB.io/"><img width="31%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/4f966094-1893-4a3c-8d18-2aa96a4d435b.gif" title="GPS"/></a> </tr> <tr> <a href="https://github.com/lmangani/gun-scape#gun-scape"><img width="31%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/6aaaedb5-ea70-49d3-b753-8062c16a411a.gif" title="数据可视化"/></a> <a href="https://github.com/amark/gun/wiki/Auth"><img width="31%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/4351a99f-72fd-4414-b51a-a6d30858699d.gif" title="P2P"/></a> <a href="https://github.com/Stefdv/gun-ui-lcd#okay-what-about-gundb-"><img width="31%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/91cded77-961a-4b94-a66c-bda0e0e93a72.gif" title="物联网"/></a> </tr> <tr> <a href="http://chat.gun.eco"><img width="31%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/88d0856c-535d-45f6-9489-31a31b6315a9.gif" title="VR世界"/></a> <a href="https://youtu.be/1ASrmQ-CwX4"><img width="31%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/d1a8ec5a-9d14-46bb-9bf6-2816c273483c.gif" title="AR"/></a> <a href="https://meething.space/"><img width="31%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/90547c72-82c9-4324-b6b3-073601527df4.gif" title="视频会议"/></a> </tr> </table>

快速入门

GUN 非常容易上手:

  • 试试浏览器中的交互式教程(普通开发者平均需要5分钟)。
  • 或者 npm install gun 然后运行示例 cd node_modules/gun && npm start(普通开发者平均需要5分钟)。

注意: 如果你没有安装 nodenpm,请先阅读这里。 如果 npm 命令行不起作用,你可能需要先 mkdir node_modules 或使用 sudo

<script src="https://cdn.jsdelivr.net/npm/gun/gun.js"></script> <script> // 在 ESM 中使用 import GUN from 'gun'; // 在 NodeJS 中使用 GUN = require('gun'); // 在 React 中使用 GUN = require('gun/gun'); gun = GUN(); gun.get('mark').put({ name: "Mark", email: "mark@gun.eco", }); gun.get('mark').on((data, key) => { console.log("实时更新:", data); }); setInterval(() => { gun.get('mark').get('live').put(Math.random()) }, 9); </script>
  • 或者尝试一些令人兴奋的功能,比如将循环引用保存到文档表中!(试一试
cat = {name: "Fluffy", species: "kitty"}; mark = {boss: cat}; cat.slave = mark; // 部分更新会与现有数据合并! gun.get('mark').put(mark); // 像访问文档一样访问数据。 gun.get('mark').get('boss').get('name').once(function(data, key){ // `once` 只获取一次数据,不订阅。 console.log("Mark 的老板是", data); }); // 遍历循环引用的图! gun.get('mark').get('boss').get('slave').once(function(data, key){ console.log("Mark 是猫的奴隶!", data); }); // 将它们都添加到表中! gun.get('list').set(gun.get('mark').get('boss')); gun.get('list').set(gun.get('mark')); // 从表中连续获取每个项目一次: gun.get('list').map().once(function(data, key){ console.log("项目:", data); }); // 实时更新表! gun.get('list').set({type: "cucumber", goal: "jumping cat"});

想要继续构建更多内容吗?跳转到文档

关于

首先也是最重要的,GUN 是一个由最友善和最乐于助人的人组成的社区。所以我邀请你来告诉我们你正在做什么,想要构建什么(无论是新技术还是旧技术!只要保持友善),并直接向我们提问。:)

<p align="center"><a href="https://www.youtube.com/watch?v=oTQXzhm8w_8"><img width="250" src="https://yellow-cdn.veclightyear.com/0a4dffa0/a0134132-0f31-4e2d-959b-b1eb7af4162e.jpg"><br/>观看 100 秒介绍视频!</a></p>

GUN 生态系统堆栈是一系列独立且模块化的工具集合,涵盖了从 CRDT 冲突解决密码学安全加密基数存储序列化网状网络路由算法,到分布式系统正确性和负载测试、CPU 调度 JSON 解析器(防止 UI 卡顿)等各个方面!

<div><img width="48%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/4b505d6c-6643-404d-aeb4-a083d7a23d93.png"/> <img width="48%" align="right" src="https://yellow-cdn.veclightyear.com/0a4dffa0/22af3df0-e657-46b2-b645-a301abc67134.png"/></div>

说到这里,让我们先对一些官方支持者表示感谢:

支持

<p align="center"> 感谢: <table> <tr> <td vlign="center"><a href="https://mozilla.org/builders"><img height="100" src="https://yellow-cdn.veclightyear.com/0a4dffa0/c647a322-1217-4303-8bd5-23c5ede8af2d.png"></a></td> <td vlign="center"><a href="http://unstoppabledomains.com/"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/05fea2a5-e139-4ba4-a864-7cfdb30ceefb.png"></a></td> <td vlign="center"><a href="https://mask.io/"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/c6bd65b7-96c8-4414-a7dc-c5fe1ca57925.svg" width="250"></a></td> </tr> <tr> <td vlign="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://www.ajar.org/"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/283b4a06-ff0b-425e-b444-881a6868701e.png" height="120"></a></td> <td vlign="center"><a href="https://wallie.io/"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/03595463-2e6a-46b8-9be8-efef17cee509.png" width="250"></a></td> <td vlign="center">&nbsp;&nbsp;<a href="https://ghostdrive.com/"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/83cabc0d-113c-435e-9d0f-470f689d8ae1.png" height="120"></a></td> </tr> </table>

<a href="https://github.com/robertheessels">Robert Heessels</a><a href="http://qxip.net/">Lorenzo Mangani</a><a href="https://nlnet.nl/">NLnet基金会</a><a href="http://github.com/samliu">Sam Liu</a><a href="http://github.com/ddombrow">Daniel Dombrowsky</a><a href="http://github.com/vincentwoo">Vincent Woo</a><a href="http://github.com/coolaj86">AJ ONeal</a><a href="http://github.com/ottman">Bill Ottman</a><a href="http://github.com/mikewlange">Mike Lange</a><a href="http://github.com/ctrlplusb">Sean Matheson</a><a href="http://github.com/alanmimms">Alan Mimms</a><a href="https://github.com/dfreire">Dário Freire</a><a href="http://github.com/velua">John Williamson</a><a href="http://github.com/finwo">Robin Bron</a><a href="http://github.com/ElieMakhoul">Elie Makhoul</a><a href="http://github.com/mikestaub">Mike Staub</a><a href="http://github.com/bmatusiak">Bradley Matusiak</a><a href="https://github.com/sjuxax">Jeff Cook</a><a href="https://github.com/nmauersberg">Nico</a><a href="https://github.com/ajartille">Aaron Artille</a><a href="https://github.com/timjrobinson">Tim Robinson</a><a href="https://github.com/hibas123">Fabian Stamm</a><a href="https://twitter.com/mikestaub">Mike Staub</a><a href="https://hunterowens.com/">Hunter Owens</a><a href="https://github.com/JacobMillner">Jacob Millner</a><a href="https://github.com/b-lack">Gerrit Balindt</a><a href="https://github.com/gabriellemon">Gabriel Lemon</a><a href="https://github.com/murageyun">Murage Martin</a><a href="https://github.com/octalmage">Jason Stallings</a>

</p>

历史

GUN是由Mark Nadal在2014年创建的,此前他花了4年时间试图让他的协作网络应用程序使用传统数据库来扩展。

<img width="250px" src="https://yellow-cdn.veclightyear.com/0a4dffa0/7e337b9c-4444-421a-96e8-b079d0f7a78b.png" align="left" title="pain point" style="margin: 0 1em 1em 0"> 在他意识到主从数据库架构会造成一个巨大的瓶颈后,他(作为一个完全的外行新手)天真地决定质疑现状,通过一些有争议的、异端的和反传统的实验来改变现状: NoDB - 无主节点、无服务器、无"单一真实来源",不使用真正的编程语言或实体硬件构建,无需DevOps,无锁定,不仅仅是SQL或NoSQL,而是两者兼具(全部 - 图形、文档、表格、键值对)。

目标是构建一个P2P数据库,可以在任何浏览器中生存,并且在假设任何离线优先活动后,能够在任何设备之间正确同步数据。

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/ff72f77b-785a-49fc-a12d-24023d0ba697.png" title="比较表">

从技术角度来说,GUN是一个图形同步协议,配备轻量级嵌入式引擎,能够在仅约9KB的gzip压缩大小内实现每秒2000万+API操作

文档

<table> <tr> <td style="border: 0;"><h3><a href="https://gun.eco/docs/API">API参考</a></h3></td> <td style="border: 0;"><h3><a href="https://gun.eco/docs/Todo-Dapp">教程</a></h3></td> <td style="border: 0;"><h3><a href="https://github.com/amark/gun/tree/master/examples">示例</a></h3></td> </tr> <tr> <td style="border: 0;"><h3><a href="https://github.com/brysgo/graphql-gun">GraphQL</a></h3></td> <td style="border: 0;"><h3><a href="https://github.com/PenguinMan98/electrontest">Electron</a></h3></td> <td style="border: 0;"><h3><a href="https://gun.eco/docs/React-Native">React与Native</a></h3></td> </tr> <tr> <td style="border: 0;"><h3><a href="https://github.com/sjones6/vue-gun">Vue</a></h3></td> <td style="border: 0;"><h3><a href="https://gun.eco/docs/Svelte">Svelte</a></h3></td> <td style="border: 0;"><h3><a href="https://github.com/Stefdv/gun-ui-lcd#syncing">Web组件</a></h3></td> </tr> <tr> <td style="border: 0;"><h3><a href="https://gun.eco/docs/CAP-Theorem">CAP定理权衡</a></h3></td> <td style="border: 0;"><h3><a href="https://gun.eco/distributed/matters.html">数据同步原理</a></h3></td> <td style="border: 0;"><h3><a href="https://gun.eco/docs/Porting-GUN">GUN的构建方式</a></h3></td> </tr> <tr> <td style="border: 0;"><h3><a href="https://gun.eco/docs/Auth">加密认证</a></h3></td> <td style="border: 0;"><h3><a href="https://github.com/amark/gun/wiki/Awesome-GUN">模块</a></h3></td> <td style="border: 0;"><h3><a href="https://gun.eco/docs/Roadmap">路线图</a></h3></td> </tr> </table>

如果没有社区贡献者,这一切都不可能实现,在此向他们表示衷心的感谢: ajmeyghani通过图解学习GUN基础知识anywhichway块存储beebaseQuasarBrockAtkinsonbrunch配置BrysgoGraphQLd3x0rSQLiteforrestjtfile.jshillct(Docker)JosePedroDias图形可视化工具JuniperChicagocycle.js绑定jverestodoMVCkristianmandrupedgeLightnet优秀的Vue用户示例用户功能全面演示场);lmanganiCytoscape可视化工具CassandraFastifyLetsEncryptmhelanderSEAomarzion便利贴应用);PsychoLlamaLevelDB);RangerMauveschemarobertheesselsgun-p2p-authrogowski(AXE)sbeleidysbiaudetC#移植版Sean MathesonObservable/RxJS/Most.js绑定ShadyzpopReact Native示例sjones6Flint;已故**Stefdv(Polymer/web组件)zrrrzztJWT认证xmonaderPython移植版)**。

我遗漏了很多其他人,抱歉,我会尽快添加他们!这个列表已经非常老旧且过时了,如果你想被列入其中,请提交一个PR!:)

测试

首先你需要运行npm install -g mocha。然后在gun根目录下运行npm test。测试会触发对数据库的持久化写入,所以后续的测试运行会失败。你必须在再次运行测试之前清除数据库。这可以通过在项目目录下运行rm -rf *data*命令来完成。

填充库

这些只在NodeJS和React Native中需要,它们为原生浏览器WebCrypto API提供填充。

如果你想使用SEA进行User认证和安全性,你需要安装:

npm install @peculiar/webcrypto --save

请查看我们的React Native文档以获取安装说明!

然后你可以无错误地引入SEA

GUN = require('gun/gun'); SEA = require('gun/sea');

部署

注意:在npm start时自动部署的默认示例会将所有GUN文件、模块和存储CDN化。

注意:未来,AXE将开始自动将你的节点集群到共享的DHT中。你可能想要禁用这个功能以运行一个隔离的网络。 注意:在云提供商上使用GUN部署Web应用程序时,您可能需要在.env文件中设置CI=false。这可以防止GUN特定的警告在部署应用程序时被视为错误。您也可以通过修改webpack配置来解决这个问题,使其不尝试构建GUN依赖项。

要为您的开发团队快速搭建GUN中继节点,可以使用HerokuDocker或下面列出的其他选项。或者使用其变体,如Dokku、K8s等!或者同时使用所有这些,让您的中继节点也实现去中心化!

Linux

使用具有sudo权限的账户SSH登录到一个干净的操作系统安装的主目录。设置所需的环境变量(见下文),然后执行:

curl -o- https://raw.githubusercontent.com/amark/gun/master/examples/install.sh | bash

请先阅读install.sh! 如果找不到curl命令,请将install.sh的内容复制粘贴到您的SSH会话中。

现在您可以安全地使用CTRL+A+D退出而不停止节点。要停止所有进程,请执行killall screen或killall node。

可能需要设置环境变量,如export HTTPS_CERT=/cert.pem HTTPS_KEY=/key.pem PORT=443。您还可以查看示例nginx配置。对于生产部署,您可能需要使用pm2或更好的工具来确保机器重启后节点仍然运行。

Dome

使用Dome一键部署GUN并获得免费试用:

部署到Dome

Heroku

部署

Heroku每15分钟删除一次您的数据,解决这个问题的一种方法是添加廉价存储

或者:

git clone https://github.com/amark/gun.git cd gun heroku create git push -f heroku HEAD:master

然后在浏览器中访问'heroku create'步骤输出的URL。确保在设置选项卡中设置所有环境配置变量。

Zeet.co

部署

然后在浏览器中访问'now --npm'步骤输出的URL。

Docker

警告:Docker镜像由社区贡献,可能较旧且缺少安全更新,请检查版本号进行比较。

Docker自动构建 Docker拉取次数 Docker星标数

Docker Hub拉取 。或者:

docker run -p 8765:8765 gundb/gun

或者在本地构建Docker镜像:

git clone https://github.com/amark/gun.git cd gun docker build -t myrepo/gundb:v1 . docker run -p 8765:8765 myrepo/gundb:v1

如果您更喜欢带有元数据标签的Docker镜像(仅限Linux/Mac):

npm run docker docker run -p 8765:8765 username/gun:git

然后在浏览器中访问http://localhost:8765

许可证

由Mark Nadal、GUN团队和众多优秀的贡献者用♥设计。 根据 Zlib / MIT / Apache 2.0 开源许可证公开发布。

FOSSA 状态

YouTube · Twitter

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多