后端数据库【免费下载链接】instantInstant is the best backend for AI-coded apps. You get auth, permissions, storage, presence, and streams — everything you need to ship apps your users will love.项目地址https://gitcode.com/gh_mirrors/inst/instant点击查看免费下载导读本文基于 Instant 官方 2025 年 3 月月度更新通告逐项拆解当月发布的四个核心能力支持在查询与事务中携带参数的权限规则ruleParams、面向 LLM 编程的llms.txt/llms-full.txt文档体系、标准 OAuth 2.0 Authorization Code 授权码流程的平台级集成以及 explorer 与后端 API 的一系列体验改进。读完本文你将掌握如何用ruleParams实现知道文档 ID 才能访问这类细粒度权限、如何把 Instant 文档接入 Cursor/Claude 作为上下文以及如何从零完成一次完整的平台 OAuth 授权与令牌刷新流程并知晓每项能力在仓库源码中的对应实现位置。一、ruleParams让权限规则感知查询上下文1.1 要解决的问题假设你的应用有一个documents命名空间并希望实现这样一条规则只有知道我的文档 ID 的人才能访问它。在ruleParams出现之前这类规则依赖请求方传入信息的逻辑很难用纯声明式规则表达——权限规则运行在服务端无法直接读取客户端 URL 上的参数。ruleParams正是为此而生它允许你在发起查询query和事务transaction时额外传入自定义参数这些参数随后可以在权限规则表达式中被引用。官方文档对这一能力的说明位于 client/www/app/docs/permissions/page.md。1.2 在查询中传入参数// 你可以从 URL 中拿到文档 id例如 const myDocId getId(window.location); const query { docs: {}, }; const { data } db.useQuery(query, { ruleParams: { knownDocId: myDocId }, // 把 id 传给 ruleParams });关键在于useQuery的第二个参数{ ruleParams: { knownDocId: myDocId } }。这个knownDocId并非查询条件而是作为额外上下文随请求一起发送到服务端供权限规则引擎读取。1.3 在事务中传入参数ruleParams同样适用于写操作。通过链式调用.ruleParams(...)可以把参数绑定到某条具体的tx操作上db.transact( db.tx.docs[id].ruleParams({ knownDocId: id }).update({ title: eat }), );注意这里的绑定粒度是单个事务操作这意味着你可以在同一次transact中对不同实体传入不同的ruleParams。1.4 在权限规则中使用参数最后在权限规则instant.perms.ts中直接引用ruleParams下的字段{ documents: { allow: { view: data.id ruleParams.knownDocId, update: data.id ruleParams.knownDocId, delete: data.id ruleParams.knownDocId } } }至此Only people who know my documents id can access it.这条规则便完整落地客户端必须携带正确的knownDocId且该 ID 必须等于被访问文档的data.id三种操作查看/更新/删除都受同一约束。1.5 更多实战模式从单文档到分享链接官方文档在基础示例之外还给出了几种高频扩展模式见 client/www/app/docs/permissions/page.md模式一一个knownDocId同时放行文档及其全部评论利用ref关联表达式让评论通过其parent.id与文档关联{ docs: { view: data.id ruleParams.knownDocId }, comment: { view: ruleParams.knownDocId in data.ref(parent.id) } }模式二允许访问多个文档查询侧传入 ID 数组规则侧使用in判断db.useQuery(..., { knownDocIds: [id1, id2, ...] }){ docs: { view: data.id in ruleParams.knownDocIds } }模式三分享链接功能把 secret 存在独立的docLinks命名空间文档是否可访问取决于传入的ruleParams.secret是否出现在其关联链接中{ docs: { view: ruleParams.secret in data.ref(docLinks.secret) } }模式四区分可查看链接与可编辑链接更精细的场景是区分只读分享与可编辑分享用bind把两个布尔判断抽象成可读性更好的命名绑定{ docs: { view: hasViewerSecret || hasEditorSecret, update: hasEditorSecret, delete: hasEditorSecret, bind: { hasViewerSecret: ruleParams.secret in data.ref(docViewLinks.secret), hasEditorSecret: ruleParams.secret in data.ref(docEditLinks.secret) } } }这四种模式覆盖了从单文档私有访问到多级分享链接的完整权限需求且都建立在同一条ruleParams机制之上。Instant 官方也将其用在了文档站点每页底部的用户反馈功能中。补充与ruleParams同属权限规则上下文的还有request.time规则执行时间戳可用于时间窗口校验、request.origin、request.ip、request.modifiedFields事务中被修改的字段列表可精确限制谁能改哪个字段等详见 client/www/app/docs/permissions/page.md。二、LLMs.txt为 AI 编程构建的文档上下文2.1 什么是 llms.txt 与 llms-full.txt为了让开发者更方便地把 Instant 的文档交给 LLM 使用官方发布了两份文本文件llms.txt全站文档的目录索引包含每篇文档的标题与简介llms-full.txt将全部文档内容拼接后的完整文本。使用方式非常直接把内容粘贴给 Claude或作为 Cursor 等工具的上下文添加进去。官方在通告中提到社区已经用这种方式构建出了博客平台和 Evernote 克隆等应用。这一能力的使用说明收录在 client/www/app/docs/using-llms/page.md。2.2 源码级原理文档是如何被聚合的这两份文件并非手工维护而是由仓库内的脚本自动生成。核心实现位于 client/www/scripts/gen-llms-txt.ts1) 读取 docs 目录下的所有 markdown 文件 2) 生成 llms.txt —— 每篇文档的标题与描述 3) 生成 llms-full.txt —— 全部文档内容按导航顺序拼接 4) 输出到 public 目录生成逻辑的关键点输入目录为app/docs输出目录为public对应线上https://www.instantdb.com/llms.txt与llms-full.txt文档顺序与站点的docsNavigation导航配置保持一致保证目录可读性复用parseFrontmatter解析文档 frontmatter 提取标题/描述、stripDynamicPaths处理动态路由路径与transformContent内容转换等 markdoc 工具函数本地生成命令为pnpm exec tsx scripts/gen-llms-txt.ts。此外文档站点还支持给任意文档 URL 追加.md后缀获取原始 Markdown如认证文档方便在特定功能卡壳时单独把对应章节粘贴给 LLM。更进一步的方案是使用instantdb/mcp的 Instant MCP Server本地命令claude mcp add instant -s user -t http https://mcp.instantdb.com/mcp让 LLM 编辑器直接管理 Instant 应用这部分同样记录在 client/www/app/docs/using-llms/page.md 中。三、OAuth Platform标准授权码流程集成3.1 适用场景如果你正在构建一个平台型产品需要为每个用户拉起独立的 Instant 数据库例如为我的用户各自创建一个 app就可以借助 Instant 的 OAuth Platform 能力Instant 支持标准的OAuth 2.0 Authorization Code 授权码流程让用户授权你的应用代表他们访问 Instant 数据、执行读取应用详情或管理应用等操作。完整的分步指引见 client/www/app/docs/auth/platform-oauth/page.md。3.2 六个步骤完整走通Step 1注册 OAuth 客户端在 Instant 控制台注册应用获得client_id与client_secret并登记回调地址redirect_uri。Step 2构造授权 URL 并引导用户https://api.instantdb.com/platform/oauth/start?client_idYOUR_CLIENT_IDresponse_typecoderedirect_uriYOUR_REDIRECT_URIscopeapps-read%20apps-writestateRANDOM_STATE_STRING用户访问该 URL 后会被引导登录如未登录并被询问是否授予请求的 scopes这里是apps-read与apps-write。state参数用于后续 CSRF 防护。Step 3处理重定向回调授权成功时Instant 会重定向回YOUR_REDIRECT_URI?codeAUTHORIZATION_CODEstateRANDOM_STATE_STRING校验state必须与 Step 2 中生成的值一致否则拒绝请求以防范 CSRF 攻击提取code这是短期、单次使用的授权码。授权失败时回调会携带错误信息YOUR_REDIRECT_URI?erroraccess_deniedstateRANDOM_STATE_STRINGStep 4用授权码换取令牌服务端执行从后端服务器向令牌端点发起POSTexport CLIENT_IDYOUR_CLIENT_ID export CLIENT_SECRETYOUR_CLIENT_SECRET export REDIRECT_URIYOUR_REDIRECT_URI export CODEYOUR_AUTHORIZATION_CODE curl -v -X POST https://api.instantdb.com/platform/oauth/token \ -H Content-Type: application/json \ -d { \client_id\: \$CLIENT_ID\, \client_secret\: \$CLIENT_SECRET\, \redirect_uri\: \$REDIRECT_URI\, \grant_type\: \authorization_code\, \code\: \$CODE\ }成功的响应体{ access_token: ACCESS_TOKEN_VALUE, refresh_token: REFRESH_TOKEN_VALUE, expires_in: 1209600, // 有效期单位秒示例约两周 scope: apps-read apps-write, // 用户实际授予的 scopes token_type: Bearer }字段含义access_token代表用户调用 API 的凭证寿命有限由expires_in决定refresh_token长期有效的令牌用于在access_token过期后换取新令牌应安全存储并关联到对应用户scope实际授予的权限范围可能与请求时不完全一致token_type固定为Bearer。Step 5携带令牌调用 Instant APIexport ACCESS_TOKENACCESS_TOKEN_VALUE curl -v https://api.instantdb.com/superadmin/apps \ -H Authorization: Bearer $ACCESS_TOKENStep 6刷新令牌access_token过期或临近过期时用refresh_token静默换新无需用户重新授权curl -v -X POST https://api.instantdb.com/platform/oauth/token \ -H Content-Type: application/json \ -d { \client_id\: \$CLIENT_ID\, \client_secret\: \$CLIENT_SECRET\, \grant_type\: \refresh_token\, \refresh_token\: \$REFRESH_TOKEN\ }响应结构与授权码交换一致返回新的access_tokenrefresh_token视服务端策略可能轮换。拿到后记得更新后端存储中的访问令牌与过期时间。四、当月其余功能更新速览4.1 Explorer 体验区间多选与显式置空在数据浏览器Explorer中按住shiftclick即可选中一段连续范围的取值现在可以显式地把某个字段的值设置为null而不必依赖删除字段的间接方式。这两项改动直接提升了数据探查与调试的效率。4.2 signOut从全设备退出到单设备退出db.auth.signOut的参数从仅支持 email 扩展为支持refresh token 与用户 id传email或id该用户的所有会话全部退出传refresh_token只退出对应的那一个会话实现从一台设备登出。相关实现与示例位于 client/www/app/docs/backend/page.md。4.3 useLocalId为未登录用户生成稳定本地 IDdb.useLocalId为未认证用户生成本地 ID非常适合**游客模式guest mode**功能import { init } from instantdb/react; const db init({ appId: __APP_ID__ }); function App() { const id db.useLocalId(guest); if (!id) return; console.log(id, 刷新页面后保持不变); }传入不同的参数会得到不同的 ID例如device、session但同一个参数生成的 ID 在刷新后保持稳定。拿到 ID 后可以像普通 ID 一样用于事务、查询甚至可以配合上一节讲的ruleParams一起使用详见 client/www/app/docs/patterns/page.md。4.4 getPresence在后端查询房间在线状态如果你使用了 rooms presence 功能现在可以通过管理端 API 直接读取某个房间当前的存在数据——例如发通知前先判断用户是否在线、避免打扰const data await db.rooms.getPresence(chat, room-123); console.log(Object.values(data)); // [{ // peer-id: ..., // user: { id: ..., email: foobar.com, ... }, // data: { typing: true, ... }, // }, // }];代码示例见 client/www/app/docs/backend/page.md。4.5 fetchOpts让 adminDB.query 融入 Next.js 缓存adminDB.query底层基于fetch因此天然兼容 Next.js 的缓存机制。通过fetchOpts你可以精细控制缓存行为例如每小时重新验证一次或打上指定缓存标签// 每小时 revalidate await adminDB.query( { goals: {} }, { fetchOpts: { next: { revalidate: 3600 }, }, }, ); // 指定缓存标签 await adminDB.query( { goals: {} }, { fetchOpts: { next: { tags: [goals:all] }, }, }, );完整说明见 client/www/app/docs/patterns/page.md。4.6 客户案例与生态本月更新通告中重点介绍了一位客户HeroUI Chat——一个基于开源 HeroUI 组件库构建的 AI 应用搭建工具可将提示词或截图直接转成 React 应用其背后由 Instant 提供后端支持。与此同时Instant 团队还发布了一篇关于为什么同步引擎sync engines是未来的技术文章收录在本仓库的 client/www/_posts/pg_upgrade.md 中可作为理解 Instant 实时同步架构设计动机的延伸阅读。五、总结回顾 2025 年 3 月的这轮更新可以归纳出三条主线权限模型进一步上下文化ruleParams把客户端上下文注入服务端规则引擎让知道即有权分享链接这类真实业务模式得以用纯声明式规则实现面向 LLM 的开发链路成型llms.txt/llms-full.txt、.md文档后缀与 Instant MCP Server 共同构成了把 Instant 文档喂给 AI 助手的完整工具链平台化与后端能力补强标准 OAuth 2.0 授权码流程让平台型应用可以为每个用户托管独立数据库而signOut细粒度登出、getPresence、fetchOpts、useLocalId等 API 扩展则覆盖了从会话管理、在线状态到服务端缓存的日常开发刚需。上述每项能力都能在本文给出的源码路径中找到对应的文档与实现细节可作为进一步深入阅读的入口。赞分享后端数据库【免费下载链接】instantInstant is the best backend for AI-coded apps. You get auth, permissions, storage, presence, and streams — everything you need to ship apps your users will love.项目地址https://gitcode.com/gh_mirrors/inst/instant点击查看免费下载相关推荐DataHub 快速上手指南元数据管理平台本地跑通与首次同步实战DataHub 快速上手指南元数据管理平台本地跑通与首次同步实战 DataHub 是一个开源的元数据管理平台负责把散落在各数据源里的表结构、所有权和血缘收进后端数据库東風破/plum最佳实践提升Rime输入法效率的7个技巧東風破/plum最佳实践提升Rime输入法效率的7个技巧 東風破/plum是一款专为Rime输入法引擎设计的配置管理器和输入方案仓库能够帮助用户轻松安装、更开发工具上一篇video-analyzer一条命令完成整段视频内容分析3 小时整理压缩到 3 分钟下一篇Notepad-- 文本编辑器使用指南跨平台中文编辑从构建到定制的实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考