Skip to content

Conversation

@ymc9
Copy link
Member

@ymc9 ymc9 commented Dec 19, 2025

Summary by CodeRabbit

  • New Features

    • Added OpenAPI plugin workflow/docs and new "View" documentation with migration guidance.
  • Documentation

    • Updated many links to the versioned 2.x docs and replaced prerelease package references with stable names.
    • Removed/consolidated numerous legacy v1 guides and simplified FAQ/quick-start material.
    • Reworked server-adapter docs to demonstrate a client-based integration approach.
  • Chores

    • CLI branding/commands renamed; homepage content, UI components and sponsorship layout refreshed; removed several "coming soon" badges.

✏️ Tip: You can customize this high-level summary in your review settings.

@vercel
Copy link

vercel bot commented Dec 19, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
zenstack-new-site Ready Ready Preview, Comment Dec 24, 2025 9:46am

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 19, 2025

Warning

Rate limit exceeded

@ymc9 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 4 minutes and 41 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between a411eeb and 348652d.

📒 Files selected for processing (2)
  • docs/modeling/polymorphism.md
  • docs/reference/zmodel/view.md

Walkthrough

Mass documentation restructuring: updated many internal links to /docs/2.x/, removed @next tags, rewrote server-adapter docs to use RPCApiHandler + client-based auth (getClient / ClientContract), renamed CLI command surface (zenstack → zen), reworked homepage/UI, added PreviewFeature component, and bulk-removed numerous versioned v1.x docs and the v3 landing page.

Changes

Cohort / File(s) Summary
Blog: doc link fixes
blog/better-auth/index.mdx, blog/check-function/index.md, blog/clerk-multitenancy/index.mdx, blog/code-as-doc/index.md, blog/custom-attributes.mdx, blog/form-validation/index.md, blog/json-typing/index.md, blog/modern-sql-dx/index.md, blog/multi-tenant/index.md, blog/nest-api/index.md, blog/next-chapter-3/index.md, blog/ocp/index.md, blog/openapi/index.md, blog/polymorphism/index.md, blog/postgrest-alternative/index.md, blog/prisma-alternative/index.md, blog/prisma-auth/index.md, blog/react-admin/index.md, blog/react-table/index.md, blog/refine-dev-backend/index.md, blog/rest-api-on-vercel/index.md, blog/saas-backend/index.md, blog/saas-demo.mdx, blog/stackauth-multitenancy/index.mdx, blog/todo-saas/index.md, blog/v2-stories/index.md
Updated many internal hyperlinks to /docs/2.x/... and minor wording edits; rest-api-on-vercel also adds OpenAPI plugin integration examples.
Docs: migration, FAQ, samples, roadmap
docs/faq.md, docs/migrate-prisma.md, docs/migrate-v2.md, docs/roadmap.md, docs/samples.md
FAQ rewritten to concise runtime/database compatibility; removed @next refs and updated stable package names; migrate-v2 clarifies package renames and NestJS guidance; roadmap and samples simplified.
Docs: quick-start & recipes
docs/orm/access-control/write-policies.md, docs/orm/quick-start.md, docs/recipe/auth-integration/better-auth.md, docs/recipe/plugin-dev.md, docs/service/client-sdk/tanstack-query/index.md
Replaced @next package pins with stable packages, updated quick-start commands and step ordering, added PreviewFeature usage in plugin-dev docs.
Reference: CLI & plugins
docs/reference/cli.md, docs/reference/plugins/prisma.md, docs/reference/plugins/*
CLI ref reworked (commands/usage, rename zenstack→zen); plugin docs reorganized (prisma plugin options/front-matter and examples).
Server adapters & API handlers
docs/reference/server-adapters/_options.mdx, docs/reference/server-adapters/_error-handling.md, docs/reference/server-adapters/elysia.mdx, docs/reference/server-adapters/express.mdx, docs/reference/server-adapters/fastify.mdx, docs/reference/server-adapters/hono.mdx, docs/reference/server-adapters/next.mdx, docs/reference/server-adapters/nuxt.mdx, docs/reference/server-adapters/sveltekit.mdx, docs/reference/server-adapters/tanstack-start.mdx, docs/service/api-handler/rest.md, docs/service/api-handler/rpc.md
Rewrote adapter docs and sample code to use RPCApiHandler + client-based auth; replaced getPrismagetClient signatures (ClientContract), simplified options and adjusted internal links.
Homepage & UI components
src/pages/index.tsx, src/pages/index.module.css, src/pages/_components/ORM.tsx, src/pages/_components/Service.tsx, src/components/ZenStackInStack.tsx, src/components/blog/post-paginator.tsx, src/components/Sponsorship.tsx
Replaced/renamed homepage sections and hero text, updated CTAs to /docs, removed some responsive CSS rules, removed "coming soon" badges, adjusted sponsorship layout and link targets, and small text/whitespace refinements.
Configuration
docusaurus.config.js
Updated docs versioning mapping/labels, announcement bar id/content, navbar/footer links and paths to align with new docs structure.
Removed: v3 landing page
src/pages/v3/index.tsx, src/pages/v3/index.module.css
Deleted the v3 landing page and its CSS module.
Removed: versioned v1.x docs
versioned_docs/version-1.x/* (many files)
Bulk deletion of numerous v1.x versioned documentation pages (guides, quick-starts, plugins, runtime API, tutorials, samples).
Docs: new/modified components & preview UI
docs/_components/PreviewFeature.tsx, docs/_components/ZModelVsPSL.tsx, docs/_components/ZenStackVsPrisma.tsx
Added PreviewFeature component (warning admonition) and changed two admonition types (info → note) to adjust docs UI.
Prism & syntax highlighting
src/lib/prism-zmodel.js
Extended ZModel keyword regex to include function, true, false, and null.
ORM docs & API wording/behavior
docs/orm/computed-fields.md, docs/orm/validation.md, docs/orm/api/*, docs/orm/plugins/*
Adjusted examples/imports (sql helper path), updated error/exception terminology to ORMError with reason codes (notably input validation), added JSON-null docs, and added PreviewFeature badges in plugin pages.

Sequence Diagram(s)

sequenceDiagram
  participant Browser as Browser / Client
  participant Adapter as Server Adapter (framework)
  participant RPCApiHandler as RPCApiHandler
  participant ClientSDK as ClientContract<Schema>
  participant DB as Database

  Note over Browser,Adapter: Client sends RPC/REST request
  Browser->>Adapter: HTTP request (RPC payload)
  Adapter->>RPCApiHandler: Forward request to RPCApiHandler
  RPCApiHandler->>ClientSDK: Invoke getClient(...) via AdapterOptions
  Note right of ClientSDK: ClientContract is authenticated (e.g., client.$setAuth)
  RPCApiHandler->>ClientSDK: Execute model operation (find/create/update)
  ClientSDK->>DB: Run DB query
  DB-->>ClientSDK: Return rows/results
  ClientSDK-->>RPCApiHandler: Return result
  RPCApiHandler-->>Adapter: Serialize & return response
  Adapter-->>Browser: HTTP response
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title 'doc: v3 GA' is vague and lacks specificity about the actual changes made in this comprehensive pull request. Consider a more descriptive title that captures the main changes, such as 'docs: update to v3 GA and migrate documentation links' or 'docs: v3 GA release with 2.x versioned docs migration'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/orm/quick-start.md (1)

44-56: Fix step numbering in the manual setup section.

The step numbers are incorrect: step 2 is numbered as "1." instead of "2.", making the sequence 1, 1, 3 instead of 1, 2, 3.

🔎 Proposed fix for step numbering
 1. Install dependencies

-1. Create a `zenstack/schema.zmodel` file
+2. Create a `zenstack/schema.zmodel` file

   You can use the following sample schema to get started:

   <ZModelStarter />
🧹 Nitpick comments (2)
docs/faq.md (1)

15-20: Consider adding Node.js version requirements for runtime support clarity.

The runtime support list is well-structured, but for v3 GA documentation, it would be helpful to specify minimum supported versions for Node.js (and optionally Bun/Vercel Edge Runtime) to set clear expectations for users. Additionally, what "passed basic end-to-end tests" means for Bun and Vercel Edge Runtime could be slightly more descriptive—for example, noting any known limitations or whether specific features are untested.

docs/reference/server-adapters/elysia.mdx (1)

49-52: Remove unused getCurrentUser function stub.

This function is not used in the example—the code uses getSessionUser imported on line 30 instead. Keeping this stub creates confusion for readers.

🔎 Proposed fix
-function getCurrentUser(context: Context) {
-    // the implementation depends on your authentication mechanism
-    ...
-}
-
 app.listen(3000);
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 89846e0 and 0888a5a.

⛔ Files ignored due to path filters (32)
  • docs/modeling/_category_.yml is excluded by !**/*.yml
  • docs/orm/_category_.yml is excluded by !**/*.yml
  • docs/orm/plugins/_category_.yml is excluded by !**/*.yml
  • docs/recipe/_category_.yml is excluded by !**/*.yml
  • docs/recipe/auth-integration/_category_.yml is excluded by !**/*.yml
  • docs/recipe/databases/_category_.yml is excluded by !**/*.yml
  • docs/reference/_category_.yml is excluded by !**/*.yml
  • docs/reference/plugins/_category_.yml is excluded by !**/*.yml
  • docs/reference/zmodel/_category_.yml is excluded by !**/*.yml
  • docs/service/_category_.yml is excluded by !**/*.yml
  • docs/service/api-handler/_category_.yml is excluded by !**/*.yml
  • docs/service/client-sdk/_category_.yml is excluded by !**/*.yml
  • docs/service/client-sdk/tanstack-query/_category_.yml is excluded by !**/*.yml
  • docs/utilities/_category_.yml is excluded by !**/*.yml
  • docs/vscode.png is excluded by !**/*.png, !**/*.png
  • vercel.json is excluded by !**/*.json
  • versioned_docs/version-1.x/assets/todo-app-erd.svg is excluded by !**/*.svg, !**/*.svg
  • versioned_docs/version-1.x/assets/todo-app-openapi.png is excluded by !**/*.png, !**/*.png
  • versioned_docs/version-1.x/assets/todo-app-splash.png is excluded by !**/*.png, !**/*.png
  • versioned_docs/version-1.x/guides/_category_.yml is excluded by !**/*.yml
  • versioned_docs/version-1.x/guides/authentication/_category_.yml is excluded by !**/*.yml
  • versioned_docs/version-1.x/quick-start/_category_.yml is excluded by !**/*.yml
  • versioned_docs/version-1.x/reference/server-adapters/_category_.yml is excluded by !**/*.yml
  • versioned_docs/version-1.x/the-complete-guide/part4/list-mgmt.png is excluded by !**/*.png, !**/*.png
  • versioned_docs/version-1.x/the-complete-guide/part4/signup-ui.gif is excluded by !**/*.gif, !**/*.gif
  • versioned_docs/version-1.x/the-complete-guide/part4/space-mgmt.png is excluded by !**/*.png, !**/*.png
  • versioned_docs/version-1.x/the-complete-guide/part4/todo-mgmt-non-optimistic.gif is excluded by !**/*.gif, !**/*.gif
  • versioned_docs/version-1.x/the-complete-guide/part4/todo-mgmt-optimistic.gif is excluded by !**/*.gif, !**/*.gif
  • versioned_docs/version-2.x/assets/todo-app-erd.svg is excluded by !**/*.svg, !**/*.svg
  • versioned_docs/version-2.x/assets/todo-app-openapi.png is excluded by !**/*.png, !**/*.png
  • versioned_docs/version-2.x/assets/todo-app-splash.png is excluded by !**/*.png, !**/*.png
  • versioned_docs/version-2.x/guides/_category_.yml is excluded by !**/*.yml
📒 Files selected for processing (107)
  • blog/better-auth/index.mdx (3 hunks)
  • blog/check-function/index.md (1 hunks)
  • blog/clerk-multitenancy/index.mdx (1 hunks)
  • blog/code-as-doc/index.md (1 hunks)
  • blog/custom-attributes.mdx (2 hunks)
  • blog/form-validation/index.md (1 hunks)
  • blog/json-typing/index.md (1 hunks)
  • blog/modern-sql-dx/index.md (1 hunks)
  • blog/multi-tenant/index.md (1 hunks)
  • blog/nest-api/index.md (1 hunks)
  • blog/next-chapter-3/index.md (1 hunks)
  • blog/ocp/index.md (1 hunks)
  • blog/openapi/index.md (1 hunks)
  • blog/polymorphism/index.md (1 hunks)
  • blog/postgrest-alternative/index.md (2 hunks)
  • blog/prisma-alternative/index.md (2 hunks)
  • blog/prisma-auth/index.md (1 hunks)
  • blog/react-admin/index.md (1 hunks)
  • blog/react-table/index.md (1 hunks)
  • blog/refine-dev-backend/index.md (2 hunks)
  • blog/rest-api-on-vercel/index.md (3 hunks)
  • blog/saas-backend/index.md (1 hunks)
  • blog/saas-demo.mdx (2 hunks)
  • blog/stackauth-multitenancy/index.mdx (1 hunks)
  • blog/todo-saas/index.md (1 hunks)
  • blog/v2-stories/index.md (2 hunks)
  • docs/faq.md (1 hunks)
  • docs/migrate-prisma.md (2 hunks)
  • docs/migrate-v2.md (3 hunks)
  • docs/orm/access-control/write-policies.md (1 hunks)
  • docs/orm/quick-start.md (3 hunks)
  • docs/recipe/auth-integration/better-auth.md (1 hunks)
  • docs/recipe/plugin-dev.md (1 hunks)
  • docs/reference/cli.md (1 hunks)
  • docs/reference/plugins/prisma.md (1 hunks)
  • docs/reference/server-adapters/_error-handling.md (1 hunks)
  • docs/reference/server-adapters/_options.mdx (1 hunks)
  • docs/reference/server-adapters/elysia.mdx (2 hunks)
  • docs/reference/server-adapters/express.mdx (1 hunks)
  • docs/reference/server-adapters/fastify.mdx (2 hunks)
  • docs/reference/server-adapters/hono.mdx (1 hunks)
  • docs/reference/server-adapters/next.mdx (3 hunks)
  • docs/reference/server-adapters/nuxt.mdx (1 hunks)
  • docs/reference/server-adapters/sveltekit.mdx (2 hunks)
  • docs/reference/server-adapters/tanstack-start.mdx (3 hunks)
  • docs/roadmap.md (1 hunks)
  • docs/samples.md (1 hunks)
  • docs/service/api-handler/rest.md (1 hunks)
  • docs/service/api-handler/rpc.md (1 hunks)
  • docs/service/client-sdk/tanstack-query/index.md (1 hunks)
  • docusaurus.config.js (4 hunks)
  • src/components/ZenStackInStack.tsx (3 hunks)
  • src/components/blog/post-paginator.tsx (1 hunks)
  • src/pages/_components/ORM.tsx (1 hunks)
  • src/pages/_components/Service.tsx (0 hunks)
  • src/pages/index.module.css (0 hunks)
  • src/pages/index.tsx (3 hunks)
  • src/pages/v3/index.module.css (0 hunks)
  • src/pages/v3/index.tsx (0 hunks)
  • versioned_docs/version-1.x/_components/_todo-requirements.md (0 hunks)
  • versioned_docs/version-1.x/_components/_zenstack-init-tips.md (0 hunks)
  • versioned_docs/version-1.x/_components/_zenstack-init.md (0 hunks)
  • versioned_docs/version-1.x/guides/authentication/auth0.md (0 hunks)
  • versioned_docs/version-1.x/guides/authentication/clerk.md (0 hunks)
  • versioned_docs/version-1.x/guides/authentication/lucia.md (0 hunks)
  • versioned_docs/version-1.x/guides/authentication/next-auth.md (0 hunks)
  • versioned_docs/version-1.x/guides/authentication/supabase.md (0 hunks)
  • versioned_docs/version-1.x/guides/client-extensions.md (0 hunks)
  • versioned_docs/version-1.x/guides/debugging.md (0 hunks)
  • versioned_docs/version-1.x/guides/deploy.md (0 hunks)
  • versioned_docs/version-1.x/guides/dev-workflow.mdx (0 hunks)
  • versioned_docs/version-1.x/guides/existing-prisma.md (0 hunks)
  • versioned_docs/version-1.x/guides/ide.md (0 hunks)
  • versioned_docs/version-1.x/guides/multiple-schema.md (0 hunks)
  • versioned_docs/version-1.x/guides/redwood.md (0 hunks)
  • versioned_docs/version-1.x/guides/supabase-security.md (0 hunks)
  • versioned_docs/version-1.x/guides/telemetry.md (0 hunks)
  • versioned_docs/version-1.x/guides/trpc.mdx (0 hunks)
  • versioned_docs/version-1.x/install.md (0 hunks)
  • versioned_docs/version-1.x/quick-start/_access-policy.md (0 hunks)
  • versioned_docs/version-1.x/quick-start/_password-omit.md (0 hunks)
  • versioned_docs/version-1.x/quick-start/_prerequisite.md (0 hunks)
  • versioned_docs/version-1.x/quick-start/_requirements.md (0 hunks)
  • versioned_docs/version-1.x/quick-start/_zenstack-init-tips.md (0 hunks)
  • versioned_docs/version-1.x/quick-start/backend.mdx (0 hunks)
  • versioned_docs/version-1.x/quick-start/next-app-router.mdx (0 hunks)
  • versioned_docs/version-1.x/quick-start/nextjs.mdx (0 hunks)
  • versioned_docs/version-1.x/quick-start/nuxt.mdx (0 hunks)
  • versioned_docs/version-1.x/quick-start/remix-run.mdx (0 hunks)
  • versioned_docs/version-1.x/quick-start/sveltekit.mdx (0 hunks)
  • versioned_docs/version-1.x/reference/error-handling.md (0 hunks)
  • versioned_docs/version-1.x/reference/limitations.md (0 hunks)
  • versioned_docs/version-1.x/reference/plugins/_invalidation.md (0 hunks)
  • versioned_docs/version-1.x/reference/plugins/_optimistic-behavior.md (0 hunks)
  • versioned_docs/version-1.x/reference/plugins/_optimistic-limitation.md (0 hunks)
  • versioned_docs/version-1.x/reference/plugins/access-policy.md (0 hunks)
  • versioned_docs/version-1.x/reference/plugins/model-meta.md (0 hunks)
  • versioned_docs/version-1.x/reference/plugins/openapi.mdx (0 hunks)
  • versioned_docs/version-1.x/reference/plugins/swr.mdx (0 hunks)
  • versioned_docs/version-1.x/reference/plugins/tanstack-query.mdx (0 hunks)
  • versioned_docs/version-1.x/reference/plugins/trpc.md (0 hunks)
  • versioned_docs/version-1.x/reference/plugins/zod.md (0 hunks)
  • versioned_docs/version-1.x/reference/runtime-api.md (0 hunks)
  • versioned_docs/version-1.x/reference/server-adapters/_using-api.mdx (0 hunks)
  • versioned_docs/version-1.x/reference/server-adapters/api-handlers/index.mdx (0 hunks)
  • versioned_docs/version-1.x/reference/server-adapters/api-handlers/rest.mdx (0 hunks)
  • versioned_docs/version-1.x/reference/server-adapters/api-handlers/rpc.mdx (0 hunks)
⛔ Files not processed due to max files limit (45)
  • versioned_docs/version-1.x/reference/zmodel-language.md
  • versioned_docs/version-1.x/the-complete-guide/epilogue.md
  • versioned_docs/version-1.x/the-complete-guide/index.md
  • versioned_docs/version-1.x/the-complete-guide/part1/0-prisma.md
  • versioned_docs/version-1.x/the-complete-guide/part1/1-zmodel.md
  • versioned_docs/version-1.x/the-complete-guide/part1/2-cli.md
  • versioned_docs/version-1.x/the-complete-guide/part1/3-enhancement.md
  • versioned_docs/version-1.x/the-complete-guide/part1/4-access-policy/4.1-model-level.md
  • versioned_docs/version-1.x/the-complete-guide/part1/4-access-policy/4.2-authn-authz.md
  • versioned_docs/version-1.x/the-complete-guide/part1/4-access-policy/4.3-current-user.md
  • versioned_docs/version-1.x/the-complete-guide/part1/4-access-policy/4.4-relations.md
  • versioned_docs/version-1.x/the-complete-guide/part1/4-access-policy/4.5-expr-func.md
  • versioned_docs/version-1.x/the-complete-guide/part1/4-access-policy/4.6-post-update.md
  • versioned_docs/version-1.x/the-complete-guide/part1/4-access-policy/4.7-field-level.md
  • versioned_docs/version-1.x/the-complete-guide/part1/4-access-policy/index.md
  • versioned_docs/version-1.x/the-complete-guide/part1/5-data-validation.md
  • versioned_docs/version-1.x/the-complete-guide/part1/6-other-enhancements.md
  • versioned_docs/version-1.x/the-complete-guide/part1/7-debugging.md
  • versioned_docs/version-1.x/the-complete-guide/part1/8-conclusion.md
  • versioned_docs/version-1.x/the-complete-guide/part1/index.md
  • versioned_docs/version-1.x/the-complete-guide/part1/under-the-hood.md
  • versioned_docs/version-1.x/the-complete-guide/part2/1-using-plugins.md
  • versioned_docs/version-1.x/the-complete-guide/part2/2-builtin-plugins.md
  • versioned_docs/version-1.x/the-complete-guide/part2/3-writing-plugins.md
  • versioned_docs/version-1.x/the-complete-guide/part2/4-conclusion.md
  • versioned_docs/version-1.x/the-complete-guide/part2/index.md
  • versioned_docs/version-1.x/the-complete-guide/part3/1-api-flavor/1.1-rpc.md
  • versioned_docs/version-1.x/the-complete-guide/part3/1-api-flavor/1.2-rest.md
  • versioned_docs/version-1.x/the-complete-guide/part3/1-api-flavor/1.3-api-handler.md
  • versioned_docs/version-1.x/the-complete-guide/part3/1-api-flavor/index.md
  • versioned_docs/version-1.x/the-complete-guide/part3/2-server-adapters.md
  • versioned_docs/version-1.x/the-complete-guide/part3/3-serialization.md
  • versioned_docs/version-1.x/the-complete-guide/part3/4-customization.md
  • versioned_docs/version-1.x/the-complete-guide/part3/5-documentation.md
  • versioned_docs/version-1.x/the-complete-guide/part3/6-conclusion.md
  • versioned_docs/version-1.x/the-complete-guide/part3/index.md
  • versioned_docs/version-1.x/the-complete-guide/part4/1-prepare-project.md
  • versioned_docs/version-1.x/the-complete-guide/part4/2-generate-hooks.md
  • versioned_docs/version-1.x/the-complete-guide/part4/3-auth-ui.md
  • versioned_docs/version-1.x/the-complete-guide/part4/4-invalidation.md
  • versioned_docs/version-1.x/the-complete-guide/part4/5-optimistic-update.md
  • versioned_docs/version-1.x/the-complete-guide/part4/6-conclusion.md
  • versioned_docs/version-1.x/the-complete-guide/part4/index.md
  • versioned_docs/version-1.x/welcome.md
  • versioned_docs/version-2.x/faq.md
💤 Files with no reviewable changes (52)
  • versioned_docs/version-1.x/quick-start/_password-omit.md
  • versioned_docs/version-1.x/quick-start/_prerequisite.md
  • versioned_docs/version-1.x/reference/plugins/_optimistic-limitation.md
  • src/pages/_components/Service.tsx
  • versioned_docs/version-1.x/quick-start/_access-policy.md
  • versioned_docs/version-1.x/reference/plugins/zod.md
  • versioned_docs/version-1.x/reference/plugins/_invalidation.md
  • versioned_docs/version-1.x/quick-start/next-app-router.mdx
  • versioned_docs/version-1.x/reference/plugins/_optimistic-behavior.md
  • versioned_docs/version-1.x/guides/telemetry.md
  • versioned_docs/version-1.x/quick-start/sveltekit.mdx
  • versioned_docs/version-1.x/guides/ide.md
  • versioned_docs/version-1.x/guides/redwood.md
  • src/pages/index.module.css
  • versioned_docs/version-1.x/guides/authentication/clerk.md
  • versioned_docs/version-1.x/quick-start/remix-run.mdx
  • versioned_docs/version-1.x/reference/plugins/tanstack-query.mdx
  • versioned_docs/version-1.x/quick-start/nuxt.mdx
  • versioned_docs/version-1.x/reference/plugins/openapi.mdx
  • versioned_docs/version-1.x/reference/server-adapters/_using-api.mdx
  • versioned_docs/version-1.x/guides/dev-workflow.mdx
  • versioned_docs/version-1.x/reference/plugins/access-policy.md
  • versioned_docs/version-1.x/install.md
  • versioned_docs/version-1.x/quick-start/backend.mdx
  • versioned_docs/version-1.x/guides/existing-prisma.md
  • versioned_docs/version-1.x/quick-start/_zenstack-init-tips.md
  • versioned_docs/version-1.x/guides/authentication/next-auth.md
  • versioned_docs/version-1.x/guides/client-extensions.md
  • versioned_docs/version-1.x/reference/server-adapters/api-handlers/rest.mdx
  • versioned_docs/version-1.x/_components/_zenstack-init-tips.md
  • versioned_docs/version-1.x/reference/server-adapters/api-handlers/index.mdx
  • versioned_docs/version-1.x/guides/deploy.md
  • versioned_docs/version-1.x/_components/_zenstack-init.md
  • versioned_docs/version-1.x/quick-start/nextjs.mdx
  • versioned_docs/version-1.x/reference/limitations.md
  • versioned_docs/version-1.x/reference/plugins/swr.mdx
  • versioned_docs/version-1.x/guides/multiple-schema.md
  • versioned_docs/version-1.x/guides/authentication/lucia.md
  • src/pages/v3/index.tsx
  • versioned_docs/version-1.x/reference/runtime-api.md
  • versioned_docs/version-1.x/reference/server-adapters/api-handlers/rpc.mdx
  • versioned_docs/version-1.x/_components/_todo-requirements.md
  • versioned_docs/version-1.x/guides/trpc.mdx
  • versioned_docs/version-1.x/reference/error-handling.md
  • src/pages/v3/index.module.css
  • versioned_docs/version-1.x/guides/authentication/supabase.md
  • versioned_docs/version-1.x/reference/plugins/trpc.md
  • versioned_docs/version-1.x/guides/debugging.md
  • versioned_docs/version-1.x/quick-start/_requirements.md
  • versioned_docs/version-1.x/guides/supabase-security.md
  • versioned_docs/version-1.x/guides/authentication/auth0.md
  • versioned_docs/version-1.x/reference/plugins/model-meta.md
🧰 Additional context used
🧬 Code graph analysis (1)
src/pages/index.tsx (1)
src/lib/content.ts (1)
  • description (1-2)
🪛 Biome (2.1.2)
src/pages/index.tsx

[error] 39-40: Avoid using target="_blank" without rel="noopener" or rel="noreferrer".

Opening external links in new tabs without rel="noopener" is a security risk. See the explanation for more details.
Safe fix: Add the rel="noopener" attribute.

(lint/security/noBlankTarget)

🪛 LanguageTool
blog/json-typing/index.md

[style] ~169-~169: Consider using polite language here.
Context: ...it looks the same as relation filters)? Let us know by leaving a comment below. You can als...

(INSERT_PLEASE)

docs/samples.md

[grammar] ~22-~22: Ensure spelling is correct
Context: ...s, TanStack Query, and ZenStack v3. ## Rallly https://github.com/zenstackhq/rallly [R...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

docs/reference/cli.md

[grammar] ~56-~56: Use a hyphen to join words.
Context: ...# migrate Run database schema migration related tasks. ```bash Usage: zen migra...

(QB_NEW_EN_HYPHEN)

🪛 markdownlint-cli2 (0.18.1)
blog/prisma-alternative/index.md

224-224: Link text should be descriptive

(MD059, descriptive-link-text)

docs/samples.md

12-12: Bare URL used

(MD034, no-bare-urls)


18-18: Bare URL used

(MD034, no-bare-urls)


24-24: Bare URL used

(MD034, no-bare-urls)

blog/react-table/index.md

333-333: Link text should be descriptive

(MD059, descriptive-link-text)

blog/rest-api-on-vercel/index.md

346-346: Link text should be descriptive

(MD059, descriptive-link-text)


537-537: Link text should be descriptive

(MD059, descriptive-link-text)


737-737: Link text should be descriptive

(MD059, descriptive-link-text)

blog/postgrest-alternative/index.md

117-117: Link text should be descriptive

(MD059, descriptive-link-text)


217-217: Link text should be descriptive

(MD059, descriptive-link-text)

docs/roadmap.md

15-15: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

🔇 Additional comments (65)
docs/orm/access-control/write-policies.md (1)

15-15: Documentation example updated for stable release.

The removal of the @next tag appropriately reflects the transition to a stable v3 GA release. Users will now install the stable @zenstackhq/plugin-policy package, which is correct.

docs/recipe/plugin-dev.md (1)

64-66: ✓ Package version update aligns with v3 GA.

The transition from @zenstackhq/sdk@next to the stable @zenstackhq/sdk release is consistent with the PR objective of v3 General Availability and aligns with the broader documentation migration pattern. The PackageInstall component is properly configured.

docs/orm/quick-start.md (1)

21-21: LGTM!

The removal of @next tags from the package references aligns correctly with the v3 GA release. The CLI scaffold command and package specifications are now pointing to stable releases instead of pre-release versions.

Also applies to: 30-30, 46-46

blog/next-chapter-3/index.md (1)

20-20: Link path updated correctly for v2.x documentation structure.

The documentation link has been properly migrated to the new versioned path structure as part of the v3 GA documentation restructuring. The reference to the v2 plugin system now correctly points to ../../docs/2.x/the-complete-guide/part2.

Please verify that the link target docs/2.x/the-complete-guide/part2 exists and is the correct documentation page for the ZenStack v2 plugin system.

docs/samples.md (1)

8-26: Content restructuring aligns well with PR objectives.

The refactored Sample Projects section successfully consolidates content to external repositories and provides a cleaner, link-focused reference that directs users to the canonical source. Descriptions remain clear and informative.

docs/reference/plugins/prisma.md (4)

2-4: Front matter updates are well-aligned with v3 GA restructuring.

The sidebar position change, added label, and updated description are appropriate for the documentation migration.


9-9: Improved clarity on plugin purpose and usage.

The updated wording in line 9 is more precise, and the new explanatory paragraph in line 11 effectively clarifies that the plugin is optional and ORM-agnostic, helping users understand when to use it.

Also applies to: 11-11


13-17: Verify removal of Installation section and completeness of Options documentation.

The change from "Installation" to "Options" represents a structural shift. Please confirm that:

  1. Installation instructions for this plugin are documented elsewhere (e.g., in a setup or getting started guide), or if the plugin is now auto-included in v3 GA.
  2. The Options section captures all configurable parameters for the @core/prisma plugin. Is output the only option, or are there others?

19-26: Example is clear and properly formatted.

The example correctly demonstrates the plugin configuration with the output path option.

docs/reference/cli.md (1)

1-313: Excellent documentation restructuring for v3 GA.

The CLI documentation is comprehensively restructured with clear command hierarchy, consistent formatting, and appropriate safety warnings. The transition from zenstack to zen invocation is well-reflected throughout, and all major commands (generate, migrate with 5 subcommands, db, info, init, check, format) are fully documented with options, defaults, and usage examples. The configuration guidance in the "Overriding Default Options" section is clear and helpful for users.

docs/faq.md (1)

11-13: Database support section is accurate and appropriately scoped.

The driver packages listed (better-sqlite3, sql.js, node-postgres) are correct and well-known in the Node.js ecosystem. The clarity about MySQL being planned is helpful.

blog/prisma-alternative/index.md (1)

216-218: Verify that the unversioned documentation paths exist after restructuring.

The PR removes version prefixes from documentation links (changing /docs/3.x/service to /docs/service, and /docs/3.x/migrate-prisma to /docs/migrate-prisma). Confirm that these unversioned paths are correctly configured in the target documentation structure and will not result in broken links in production.

Also applies to: 224-224

docs/migrate-prisma.md (3)

35-35: Package dependencies appropriately updated to stable versions.

The transition from @next tags to stable @zenstackhq/orm and @zenstackhq/cli packages is correct for the v3 GA release and aligns with the PR objectives. The documentation now reflects production-ready dependencies.


240-247: Computed field schema example is clear and correct.

The @computed annotation on the fullName field correctly demonstrates the ZenStack equivalent for Prisma result extensions. The formatting and syntax are consistent with the ZModel schema language described in the guide.


263-270: Feature gaps table appropriately reflects v3 capabilities.

The table clearly documents unsupported Prisma features and planned support, providing readers with clear expectations for the migration. The current entries are relevant to the migration guide and help set expectations for adopters transitioning from Prisma.

docs/roadmap.md (1)

9-10: ✓ LGTM on feature updates.

The addition of "Row-Level access control" as completed and the new "Field-level access control" as pending are well-positioned. The capitalization change to "Data validation" also improves consistency.

Also applies to: 16-16

docs/recipe/auth-integration/better-auth.md (3)

156-156: CLI command reference looks good.

Line 156 correctly references the zen generate command, which aligns with the PR's broader migration from the zenstack CLI to zen.


61-61: The relative documentation link is valid.

The relative path ../../orm/access-control/ correctly resolves to the existing access-control documentation directory at docs/orm/access-control/, which contains the expected documentation files (index.md, field-level.md, query.md, write-policies.md, post-update.md). No link correction is needed.


21-21: Package dependency reference is incorrect.

The documentation should reference better-auth directly (not @zenstackhq/better-auth), which is already available as a stable release without any version suffix. Verify that line 21 contains the correct package name and update if needed.

docs/service/client-sdk/tanstack-query/index.md (1)

42-42: Clarify whether this documentation is for ZenStack v2 or v3.

ZenStack v3 is currently in Beta, not GA. If this documentation targets v3, the @next tag should remain because v3 packages are still distributed under that tag. If this is for v2 documentation, stable releases (v2.22.1) are available on npm, and the removal is appropriate.

src/components/ZenStackInStack.tsx (1)

55-55: All documentation links correctly migrated to 2.x versioned paths.

The three URL changes in this file (lines 55, 177, 189) are properly updated to /docs/2.x/ paths. Verification confirms: (1) the versioned_docs/version-2.x/ directory exists, confirming these paths are available, and (2) no old-style documentation URLs remain in the codebase, confirming the migration is complete and consistent.

src/components/blog/post-paginator.tsx (1)

69-69: Verify that the "/docs" link destination is properly configured.

The link was updated from "/docs/welcome" to "/docs". Ensure this path routes correctly in the documentation site configuration and doesn't result in broken navigation for users visiting this call-to-action.

docs/migrate-v2.md (2)

44-54: Verify the AI summary's claim about PackageUninstall removal.

The AI summary states "the uninstall tag for the two old packages is removed entirely," but line 53 still contains the <PackageUninstall> component. Please clarify whether the uninstall instruction should remain or be removed.

If the uninstall component should be removed, apply this fix:

Make sure you replace them in your project.

-<PackageUninstall dependencies={["zenstack", "@zenstackhq/runtime"]} />
 <PackageInstall dependencies={["@zenstackhq/orm"]} devDependencies={["@zenstackhq/cli"]} />

266-268: NestJS guide reference is correct.

The file exists at docs/recipe/nestjs.md and the relative path reference ./recipe/nestjs in line 268 is valid.

docusaurus.config.js (3)

38-47: LGTM! Versioning configuration correctly updated.

The versioning structure properly reflects the migration to v3 GA, with 'current' mapped to '3.x' and '2.x' available as a versioned option. This aligns with the PR objective of removing v1.x documentation and establishing the new 2.x/3.x structure.


97-108: LGTM! Navbar links correctly updated.

The navigation configuration properly reflects the new documentation structure:

  • "Get Started" points to /docs/ with an appropriate regex to highlight only the docs homepage
  • "Reference" points to the reference category page at /docs/category/reference

These changes align with the v3 GA documentation restructuring.


161-176: LGTM! Footer links correctly updated.

The footer navigation has been properly updated to point to /docs instead of /docs/welcome, maintaining consistency with the navbar changes and aligning with the new documentation structure.

src/pages/_components/ORM.tsx (1)

48-49: LGTM! Features are now marked as available.

The removal of "coming soon" indicators appropriately reflects that access control enforcement and runtime data validation are now fully available features in v3 GA. The code example in the file (lines 20-21) demonstrates the AccessControlPlugin usage, which aligns with these features being production-ready.

src/pages/index.tsx (2)

6-10: LGTM! Homepage component refactor looks good.

The new component structure (ValueProps, SchemaLanguage, ORM, Service, AICoding) properly replaces the old components and is correctly imported and rendered in the appropriate sections. The component organization improves the homepage architecture for the v3 GA release.

Also applies to: 71-87


13-13: LGTM! Content and navigation updates align with v3 GA.

The updated hero copy, description, and documentation link changes appropriately reflect the v3 GA release. The simplified docs link from /docs/welcome to /docs improves the entry point navigation, and the "V3" suffix in the layout title helps with version differentiation.

Also applies to: 21-29, 33-33, 67-67

docs/service/api-handler/rpc.md (1)

11-11: LGTM!

Consistent link update with the rest.md file, pointing to the same ../server-adapter target.

docs/reference/server-adapters/_error-handling.md (1)

3-3: LGTM!

Link targets correctly updated to point to the service-level API handler documentation with valid section anchors.

docs/reference/server-adapters/_options.mdx (1)

1-11: LGTM!

Clean simplification of the options documentation. The prop-based approach for getClient type signature enables consistent reuse across adapter docs while allowing framework-specific types.

docs/reference/server-adapters/hono.mdx (1)

24-43: LGTM!

The updated example clearly demonstrates the v3 API pattern with RPCApiHandler and the getClient callback for session-aware database access. The code is well-structured with helpful inline comments explaining the auth integration.

docs/service/api-handler/rest.md (1)

11-11: LGTM! The relative path change from ../../../category/server-adapters to ../server-adapter correctly points to the existing docs/service/server-adapter.md file.

docs/reference/server-adapters/express.mdx (1)

24-45: Documentation follows the consistent pattern.

The Express.js adapter documentation correctly mirrors the API changes seen in other adapters, using RPCApiHandler and the getClient callback pattern. The Express-specific request/response parameters are properly reflected in the callback signature.

docs/reference/server-adapters/nuxt.mdx (1)

24-37: LGTM - Nuxt-specific implementation is correct.

The Nuxt adapter properly uses H3Event types and follows the file-based routing convention (/server/api/model/[...].ts). The getClient pattern is correctly adapted for Nuxt's server event model.

docs/reference/server-adapters/fastify.mdx (1)

24-41: LGTM - Fastify plugin pattern correctly documented.

The Fastify adapter documentation properly uses the plugin registration pattern and includes the necessary prefix option. The getClient callback correctly receives FastifyRequest and FastifyReply parameters.

docs/reference/server-adapters/next.mdx (2)

32-86: Excellent - Comprehensive documentation for both Next.js routers.

The documentation properly covers both the App Router and Pages Router patterns, with appropriate type signatures for each:

  • App Router: getClient: (req: NextRequest) => ... with useAppDir: true
  • Pages Router: getClient: (req: NextApiRequest, res: NextApiResponse) => ...

The use of tabs to separate the two approaches enhances readability.


88-108: Good addition - Middleware example for endpoint control.

The middleware example demonstrates a practical use case for restricting access to specific endpoints. This is valuable guidance for production implementations.

docs/reference/server-adapters/tanstack-start.mdx (1)

28-54: LGTM - TanStack Start adapter correctly documented.

The adapter properly uses TanStack Start's file-based routing with a catch-all route pattern (/api/$). The handler registration for multiple HTTP methods (GET, POST, PUT, PATCH, DELETE) follows TanStack Start conventions.

docs/reference/server-adapters/sveltekit.mdx (1)

24-38: No issues found. The documented APIs and example are correct.

The example correctly uses RPCApiHandler from @zenstackhq/server/api, imports schema from ~/zenstack/schema, and implements the getClient callback as (event) => client.$setAuth(getSessionUser(event)). The getClient callback signature matches the expected type: (event: RequestEvent) => ClientContract | Promise<ClientContract>.

blog/react-admin/index.md (1)

290-290: Link update to 2.x documentation path is correct.

The change properly routes to the versioned documentation, which is appropriate for a v3 GA release where v2.x becomes the stable docs path.

blog/prisma-auth/index.md (1)

51-51: Link update to 2.x documentation is appropriate.

The change correctly updates the Prisma crash course reference to the versioned 2.x docs path.

blog/postgrest-alternative/index.md (1)

117-117: Link versioning to 2.x paths is correct.

The three link updates (lines 117, 217, 223) properly version the documentation references for the v3 GA release structure.

Also applies to: 217-217, 223-223

blog/refine-dev-backend/index.md (1)

205-205: Link versioning to 2.x documentation paths is correct.

Both absolute URL updates (lines 205, 308) properly version the external ZenStack documentation links for the v3 GA release.

Also applies to: 308-308

blog/todo-saas/index.md (1)

88-88: Link update to 2.x documentation with anchor preserved is correct.

The change properly versions the reference to Collection Predicate Expressions while preserving the fragment identifier for direct navigation to the correct documentation section.

blog/stackauth-multitenancy/index.mdx (1)

107-107: Link update to 2.x ZModel documentation is correct.

The change properly versions the reference to the ZModel documentation, which is foundational context for the schema declaration shown in that section.

blog/polymorphism/index.md (1)

13-13: Link update to 2.x upgrade guide is correct.

The change properly versions the upgrade guide reference in the editor's note, which documents when the polymorphism feature was released.

blog/saas-backend/index.md (1)

65-65: Link update to 2.x documentation with anchor preserved is correct.

The change properly versions the access policy documentation reference while preserving the fragment identifier for direct navigation to the relevant section.

blog/ocp/index.md (1)

311-311: LGTM! Documentation link properly versioned.

The link update correctly points to the 2.x documentation path, consistent with the v3 GA migration strategy.

blog/json-typing/index.md (1)

169-169: LGTM! Documentation link correctly updated.

The link properly points to the versioned 2.x documentation path.

blog/form-validation/index.md (1)

84-84: LGTM! Access policy link properly updated.

The versioned link path is correct and consistent with the documentation migration.

blog/clerk-multitenancy/index.mdx (1)

108-108: LGTM! ZModel documentation link correctly versioned.

The link update properly points to the 2.x documentation.

blog/v2-stories/index.md (1)

49-49: LGTM! Documentation links properly versioned.

Both the Polymorphic Relations and Upgrading to V2 links correctly point to the 2.x versioned documentation paths, which is appropriate for a v3 GA release.

Also applies to: 144-144

blog/better-auth/index.mdx (1)

207-207: LGTM! All documentation links properly versioned.

All four documentation references (ZModel, RPC/API handlers, TanStack Query plugin, and access policies) correctly point to the 2.x versioned paths.

Also applies to: 349-351, 437-437

blog/multi-tenant/index.md (1)

280-280: LGTM! Access policy documentation link correctly updated.

The link properly points to the versioned 2.x documentation path.

blog/code-as-doc/index.md (1)

108-108: LGTM! Plugin documentation link properly versioned.

The link correctly points to the 2.x versioned plugin guide, completing the consistent documentation versioning across all blog posts.

blog/openapi/index.md (1)

434-434: LGTM! Documentation link updated correctly.

The access policy documentation link has been properly updated to point to the versioned 2.x path, consistent with the broader documentation migration effort in this PR.

blog/check-function/index.md (1)

184-184: LGTM! Collection predicate expressions link updated correctly.

The documentation reference has been properly updated to the versioned 2.x path while maintaining the correct anchor fragment.

blog/nest-api/index.md (1)

328-328: LGTM! REST API reference link updated correctly.

The server adapters documentation link has been properly updated to the versioned 2.x path with the correct anchor fragment preserved.

blog/rest-api-on-vercel/index.md (1)

346-346: LGTM! All documentation links updated correctly.

All three documentation references have been properly updated to point to the versioned 2.x paths:

  • REST API endpoints and features reference (line 346)
  • Access policies guide (line 537)
  • OpenAPI plugin documentation (line 737)

The changes are consistent with the broader documentation migration effort in this PR.

Also applies to: 537-537, 737-737

blog/custom-attributes.mdx (1)

199-199: LGTM! ZModel documentation links updated correctly.

Both documentation references have been properly updated to the versioned 2.x paths:

  • ZModel language reference (line 199)
  • Next.js quick-start guide with anchor (line 215)

The changes maintain correct anchor fragments and are consistent with the documentation versioning strategy.

Also applies to: 215-215

blog/saas-demo.mdx (1)

128-128: LGTM! ZModel language references updated correctly.

Both documentation links have been properly updated to the versioned 2.x paths:

  • Custom attribute reference (line 128)
  • Collection predicate expressions reference (line 200)

The changes are consistent with the overall documentation migration effort and maintain correct anchor fragments.

Also applies to: 200-200

blog/modern-sql-dx/index.md (1)

37-37: Update the Neon documentation link to remove the invalid "2.x" path.

The URL in this change includes /docs/2.x/reference/glossary in the path, but Neon's glossary is located at /docs/reference/glossary without version segments. Neon documentation is published at https://neon.tech/docs, and the current URL structure does not use 2.x versioning. Update the link to https://neon.tech/docs/reference/glossary#scale-to-zero to point to the correct, existing documentation page.

Likely an incorrect or invalid review comment.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
docs/recipe/nestjs.md (1)

11-11: Minor wording clarification needed.

Line 11 states "create a DbService by extending the ZenStackClient constructor," but the code extends the class itself, not the constructor. Consider rephrasing to "extending the ZenStackClient class."

📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0888a5a and 1e01dd5.

📒 Files selected for processing (1)
  • docs/recipe/nestjs.md
🔇 Additional comments (2)
docs/recipe/nestjs.md (2)

14-25: ✓ Simplified ZenStackClient API aligns with v3 GA changes.

The removal of the ClientOptions second generic parameter from ZenStackClient<SchemaType> correctly reflects the simplified v3 API surface. The import and class declaration changes are consistent with the v3 GA documentation goals.


129-142: RestApiHandler remains a valid pattern for this NestJS recipe in v3 GA.

ZenStack currently provides two built-in API handlers: RPC API Handler and RESTful API Handler. The example correctly uses RestApiHandler, which is documented and actively supported for v3. The import path @zenstackhq/server/api is correct for RestApiHandler. NestJS adapter documentation demonstrates both RPC and RESTful API handlers as valid implementation patterns. No changes needed to the import path or API handler pattern—both approaches are valid architectural choices for CRUD operations.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/components/Sponsorship.tsx (1)

22-30: Security: Add rel="noopener noreferrer" to external sponsor links.

The Sponsor component opens external sponsor websites in a new tab but lacks the rel="noopener noreferrer" attribute. This creates a security vulnerability where the opened page could access window.opener and potentially redirect the parent page (reverse tabnapping).

🔎 Proposed security fix
 function Sponsor({ src, name, website }: { src: string; name: string; website: string }): JSX.Element {
     const alt = src.split('/').pop()?.split('.')[0] ?? 'logo';
     return (
-        <a href={website} target="_blank" className="no-underline">
+        <a href={website} target="_blank" rel="noopener noreferrer" className="no-underline">
             <img src={src} className="h-32 object-contain" alt={alt} />
             <h2 className="text-xl mt-2">{name}</h2>
         </a>
     );
 }
♻️ Duplicate comments (1)
src/pages/index.tsx (1)

39-45: Security: Add rel="noopener noreferrer" to external StackBlitz link.

The external StackBlitz playground link opens in a new tab but lacks the rel="noopener noreferrer" attribute, creating a security vulnerability where the opened page could access window.opener and potentially redirect the parent page.

As per static analysis hints.

🔎 Proposed security fix
                             <a
                                 href="https://stackblitz.com/~/github.com/zenstackhq/v3-doc-quick-start?file=zenstack%2fschema.zmodel&file=main.ts&view=editor&showSidebar=0&hideNavigation=1&hideExplorer=1"
                                 target="_blank"
+                                rel="noopener noreferrer"
-                                className="button button--outline button--lg w-64 border-solid lg:text-2xl lg:px-8 lg:py-4 hover:text-gray-200 dark:hover:text-gray-600"
+                                className="button button--outline button--lg w-64 border-solid lg:text-2xl lg:px-8 lg:py-4 hover:text-gray-200 dark:hover:text-gray-600"
                             >
                                 Open Playground
                             </a>
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1e01dd5 and 64552a5.

⛔ Files ignored due to path filters (1)
  • static/img/logo/suhyl.png is excluded by !**/*.png, !**/*.png
📒 Files selected for processing (4)
  • src/components/Sponsorship.tsx
  • src/pages/_components/ORM.tsx
  • src/pages/_components/Service.tsx
  • src/pages/index.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/pages/_components/ORM.tsx
🧰 Additional context used
🧬 Code graph analysis (1)
src/pages/index.tsx (3)
src/lib/content.ts (1)
  • description (1-2)
src/pages/_components/ORM.tsx (1)
  • ORM (3-62)
src/pages/_components/Service.tsx (1)
  • Service (5-112)
🪛 Biome (2.1.2)
src/pages/index.tsx

[error] 41-42: Avoid using target="_blank" without rel="noopener" or rel="noreferrer".

Opening external links in new tabs without rel="noopener" is a security risk. See the explanation for more details.
Safe fix: Add the rel="noopener" attribute.

(lint/security/noBlankTarget)

src/pages/_components/Service.tsx

[error] 24-25: Avoid using target="_blank" without rel="noopener" or rel="noreferrer".

Opening external links in new tabs without rel="noopener" is a security risk. See the explanation for more details.
Safe fix: Add the rel="noopener" attribute.

(lint/security/noBlankTarget)


[error] 38-39: Avoid using target="_blank" without rel="noopener" or rel="noreferrer".

Opening external links in new tabs without rel="noopener" is a security risk. See the explanation for more details.
Safe fix: Add the rel="noopener" attribute.

(lint/security/noBlankTarget)

🔇 Additional comments (4)
src/components/Sponsorship.tsx (1)

7-16: LGTM! Responsive sponsor layout looks good.

The flex-wrap layout with gap-16 provides a clean, responsive display for multiple sponsors. All sponsor entries include the required props (src, name, website).

src/pages/index.tsx (3)

8-15: LGTM! Component imports and description look good.

The new component imports (AICoding, ORM, SchemaLanguage, Service, ValueProps) are properly structured, and the description constant provides a clear, comprehensive overview of ZenStack v3's capabilities.


23-31: LGTM! Hero section updates are clear and compelling.

The updated title "Battery-Included TypeScript ORM" and subtitle effectively communicate ZenStack v3's value proposition. The responsive font sizing is well-structured.


66-119: LGTM! Page restructure with new components is well-organized.

The home page restructure effectively showcases the new components (ValueProps, SchemaLanguage, ORM, Service, AICoding) with a clean, alternating layout. The addition of the sponsorship CTA and the V3 branding in the layout title are appropriate for the GA release.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
docs/modeling/view.md (1)

12-12: Consider tightening informal phrasing for documentation tone.

The phrase "pretty much the same" is informal. For a documentation context, consider rephrasing to "is similar to" or "is defined like" to maintain a more formal and professional tone.

🔎 Proposed refinement
-The `view` construct is used to define a SQL view. Defining a `view` is pretty much the same as defining a `model`, with the exception that views cannot have index or id fields (designated with `@id`, `@@id`, or `@@index` attributes).
+The `view` construct is used to define a SQL view. Defining a `view` is similar to defining a `model`, with the exception that views cannot have index or id fields (designated with `@id`, `@@id`, or `@@index` attributes).
src/pages/index.tsx (1)

108-113: Use <a> tag with target="_blank" and rel="noopener noreferrer" for external sponsor link.

The GitHub sponsors link uses the Link component without target="_blank" or rel attributes, which means it opens in the same tab and navigates users away from the documentation site. For consistency with the StackBlitz link pattern and better UX, consider using a regular <a> tag with explicit attributes so users remain on the docs site.

🔎 Proposed refactor for consistency and UX
-                        <Link
-                            className="button button--primary button--lg text-xl w-fit py-4"
-                            to="https://github.com/sponsors/zenstackhq"
-                        >
+                        <a
+                            className="button button--primary button--lg text-xl w-fit py-4"
+                            href="https://github.com/sponsors/zenstackhq"
+                            target="_blank"
+                            rel="noopener noreferrer"
+                        >
                             Support this project →
-                        </Link>
+                        </a>
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9c5ee75 and f7d332d.

📒 Files selected for processing (11)
  • docs/index.md
  • docs/modeling/attribute.md
  • docs/modeling/enum.md
  • docs/modeling/mixin.md
  • docs/modeling/multi-file.md
  • docs/modeling/plugin.md
  • docs/modeling/typed-json.md
  • docs/modeling/view.md
  • docs/orm/migration.md
  • docs/prerequisite.md
  • src/pages/index.tsx
✅ Files skipped from review due to trivial changes (5)
  • docs/modeling/typed-json.md
  • docs/modeling/mixin.md
  • docs/modeling/attribute.md
  • docs/prerequisite.md
  • docs/modeling/plugin.md
🧰 Additional context used
🪛 LanguageTool
docs/modeling/view.md

[style] ~12-~12: The phrase ‘pretty much’ can be informal. To strengthen your writing, consider removing it or replacing it with an adverb.
Context: ...define a SQL view. Defining a view is pretty much the same as defining a model, with th...

(PRETTY_MUCH)

🔇 Additional comments (6)
docs/modeling/multi-file.md (1)

8-8: LGTM!

Proper title case capitalization for the heading. The rest of the documentation is clear and accurate.

docs/orm/migration.md (1)

34-34: Clear guidance for handling unsupported migration features.

The addition provides users with a practical workaround for features not yet supported by the migration engine. The link to the views documentation properly reinforces the cross-document consistency on handling migrations for advanced features.

docs/modeling/view.md (2)

8-10: Appropriate preview warning.

The warning clearly communicates the preview status and potential for breaking changes, which sets proper expectations for users adopting this feature.


26-28: Well-structured migration guidance with proper cross-referencing.

The migration support section clearly explains the engine's limitations and provides two actionable workflows (--create-only or manual DDL). The back-reference to the migration documentation correctly anchors users to the detailed migrate dev section, establishing consistent bidirectional documentation links with the migration guide.

src/pages/index.tsx (1)

40-42: Security fix properly applied.

The external StackBlitz link now includes rel="noopener noreferrer" alongside target="_blank", which prevents reverse tabnapping attacks. This addresses the security concern from the previous review.

docs/index.md (1)

31-31: Good: External Prisma link added.

Adding the direct link to Prisma's website is a good practice and appropriately positions Prisma as an external reference now that v3 has removed it as a runtime dependency.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

♻️ Duplicate comments (2)
docs/samples.md (1)

12-12: Wrap bare URLs in markdown links or angle brackets (previously flagged).

Lines 12, 18, and 24 contain bare URLs that should be formatted according to Markdown best practices. This issue was flagged in a previous review. Please wrap them in angle brackets <url> or convert them to markdown links with descriptive text.

🔎 Proposed fix
 ## ORM Sample
 
-https://github.com/zenstackhq/zenstack-v3/tree/main/samples/orm
+[ORM Sample](https://github.com/zenstackhq/zenstack-v3/tree/main/samples/orm)
 
 A simple TypeScript application that demonstrates how to model a minimum blog app and how to use the ORM client to query the database.
 
 ## Multi-Tenant Todo
 
-https://github.com/zenstackhq/v3-sample-todo-nextjs
+[Multi-Tenant Todo](https://github.com/zenstackhq/v3-sample-todo-nextjs)
 
 A multi-tenant Todo app built with Next.js, Auth.js, TanStack Query, and ZenStack v3.
 
 ## Rallly
 
-https://github.com/zenstackhq/rallly
+[Rallly Repository](https://github.com/zenstackhq/rallly)

Also applies to: 18-18, 24-24

docs/reference/cli.md (1)

24-24: Hyphenate compound adjective "migration-related" in all three locations.

This issue was previously flagged in a review comment. The phrase "migration related tasks" should use a hyphen to form the correct compound adjective "migration-related tasks" in the commands list (line 24), the migrate command description (line 56), and the migrate usage section (line 61).

🔎 Proposed fixes
-  migrate             Run database schema migration related tasks.
+  migrate             Run database schema migration-related tasks.
-Run database schema migration related tasks.
+Run database schema migration-related tasks.

(Applies to lines 56 and 61 identically)

Also applies to: 56-56, 61-61

🧹 Nitpick comments (9)
docs/orm/api/update.md (1)

44-44: Minor style improvement: Replace "very powerful" with a stronger descriptor.

The phrase "are very powerful" uses an over-used intensifier. Consider a more direct alternative.

🔎 Suggested edit
-The `update` and `upsert` methods are very powerful in that they allow you to freely manipulate relations.
+The `update` and `upsert` methods allow you to freely manipulate relations with fine-grained control.

Alternatively:

-The `update` and `upsert` methods are very powerful in that they allow you to freely manipulate relations.
+The `update` and `upsert` methods enable flexible manipulation of relations without restrictions.
docs/reference/server-adapters/nuxt.mdx (1)

41-41: Consider adding a brief explanation of ClientContract<Schema>.

Users unfamiliar with the new API may not understand what ClientContract<Schema> represents. A link to documentation explaining this type contract would improve usability.

docs/reference/server-adapters/sveltekit.mdx (1)

27-29: Import path aliases may not match SvelteKit conventions.

SvelteKit typically uses $lib/ as the alias for the src/lib directory, not ~/. Consider updating to match SvelteKit conventions:

-import { getSessionUser } from '~/auth';
-import { client } from '~/db';
-import { schema } from '~/zenstack/schema';
+import { getSessionUser } from '$lib/auth';
+import { client } from '$lib/db';
+import { schema } from '$lib/zenstack/schema';

Alternatively, if ~/ is intentionally kept for consistency across docs, a brief note explaining the alias would be helpful.

docs/reference/server-adapters/next.mdx (2)

40-45: Consider improving formatting for readability.

The useAppDir: true option is on the same line as the closing brace, which reduces readability:

Suggested formatting improvement
 const handler = NextRequestHandler({ 
     apiHandler: new RPCApiHandler({ schema }),
     // getSessionUser extracts the current session user from the request, its
     // implementation depends on your auth solution
     getClient: (req: NextRequest) => client.$setAuth(getSessionUser(req)),
-    useAppDir: true });
+    useAppDir: true,
+});

36-38: Import path aliases may not match Next.js conventions.

Next.js projects commonly use @/ as the path alias (configured in tsconfig.json), not ~/. Consider aligning with Next.js conventions or adding a note about the alias configuration:

-import { getSessionUser } from '~/auth';
-import { client } from '~/db';
-import { schema } from '~/zenstack/schema';
+import { getSessionUser } from '@/auth';
+import { client } from '@/db';
+import { schema } from '@/zenstack/schema';

The same applies to the Pages Router example (lines 68-70).

docs/modeling/view.md (1)

12-12: Prefer more formal wording instead of "pretty much."

The phrase "pretty much the same as" is informal for technical documentation. Consider a more direct phrasing like "is the same as" or "is defined similarly to" for consistency with documentation tone.

🔎 Proposed revision
-The `view` construct is used to define a SQL view. Defining a `view` is pretty much the same as defining a `model`, with the exception that views cannot have index or id fields (designated with `@id`, `@@id`, or `@@index` attributes).
+The `view` construct is used to define a SQL view. Defining a `view` is the same as defining a `model`, with the exception that views cannot have index or id fields (designated with `@id`, `@@id`, or `@@index` attributes).
docs/reference/plugins/policy.md (1)

25-27: Use fenced code blocks for consistency.

The documentation uses indented code blocks (4-space indentation), but fenced code blocks (triple backticks) are preferred for consistency with the rest of the documentation and better markdown linting compliance.

🔎 Example fix for one function signature
-    ```zmodel
-    function auth(): User {}
-    ```
+```zmodel
+function auth(): User {}
+```

Apply similar changes to all function and attribute signature code blocks.

Also applies to: 35-37, 49-51, 57-59, 65-67, 73-75, 81-83, 89-91, 97-99, 105-107, 114-116, 122-124, 132-134, 142-144

docs/_components/PreviewFeature.tsx (1)

9-16: Consider adding spacing for children content.

When children is provided, it will be rendered directly after the warning text without any spacing. This could cause formatting issues.

🔎 Proposed improvement
 const PreviewFeature: FC<PreviewFeatureProps> = ({ name, children }) => {
     return (
         <Admonition type="warning" title="Preview Feature">
-            {name} is in preview and may be subject to breaking changes in future releases.
-            {children}
+            <p>{name} is in preview and may be subject to breaking changes in future releases.</p>
+            {children && <div>{children}</div>}
         </Admonition>
     );
 };

This ensures proper spacing and only renders children when provided.

docs/orm/api/filter.md (1)

107-107: Consider splitting the long sentence for clarity.

The sentence on line 107 is grammatically complex and may be difficult for readers to follow. Per static analysis, consider inserting a period and starting a new sentence after "in the schema,".

🔎 Proposed revision
-[Strongly Typed Json](../../modeling/typed-json) fields, with their structure well defined in the schema, allow for a more convenient way to filter. Instead of using JSON path, you can directly use fields to build-up the filter, similar to how you would filter with relations.
+[Strongly Typed Json](../../modeling/typed-json) fields have their structure well defined in the schema. They allow for a more convenient way to filter—instead of using JSON path, you can directly use fields to build-up the filter, similar to how you would filter with relations.
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f7d332d and a411eeb.

📒 Files selected for processing (63)
  • code-repos/zenstackhq/v3-doc-orm-computed-fields
  • code-repos/zenstackhq/v3-doc-plugin
  • docs/_components/PreviewFeature.tsx
  • docs/_components/ZModelVsPSL.tsx
  • docs/_components/ZenStackVsPrisma.tsx
  • docs/modeling/attribute.md
  • docs/modeling/conclusion.md
  • docs/modeling/mixin.md
  • docs/modeling/plugin.md
  • docs/modeling/polymorphism.md
  • docs/modeling/relation.md
  • docs/modeling/typed-json.md
  • docs/modeling/view.md
  • docs/orm/access-control/index.md
  • docs/orm/access-control/post-update.md
  • docs/orm/access-control/query.md
  • docs/orm/access-control/write-policies.md
  • docs/orm/api/_select-include-omit.md
  • docs/orm/api/count.md
  • docs/orm/api/create.md
  • docs/orm/api/filter.md
  • docs/orm/api/find.md
  • docs/orm/api/index.md
  • docs/orm/api/json-null.md
  • docs/orm/api/transaction.md
  • docs/orm/api/update.md
  • docs/orm/benchmark.md
  • docs/orm/cli.md
  • docs/orm/client.md
  • docs/orm/computed-fields.md
  • docs/orm/errors.md
  • docs/orm/index.md
  • docs/orm/inferred-types.md
  • docs/orm/migration.md
  • docs/orm/plugins/entity-mutation-hooks.md
  • docs/orm/plugins/index.md
  • docs/orm/plugins/kysely-query-hooks.md
  • docs/orm/plugins/query-api-hooks.md
  • docs/orm/query-builder.md
  • docs/orm/quick-start.md
  • docs/orm/validation.md
  • docs/recipe/databases/neon.md
  • docs/recipe/plugin-dev.md
  • docs/reference/cli.md
  • docs/reference/plugins/policy.md
  • docs/reference/server-adapters/next.mdx
  • docs/reference/server-adapters/nuxt.mdx
  • docs/reference/server-adapters/sveltekit.mdx
  • docs/reference/zmodel/attribute.md
  • docs/reference/zmodel/data-field.md
  • docs/reference/zmodel/expression.md
  • docs/reference/zmodel/function.md
  • docs/reference/zmodel/import.md
  • docs/reference/zmodel/input-validation.md
  • docs/reference/zmodel/plugin.md
  • docs/reference/zmodel/type.md
  • docs/reference/zmodel/view.md
  • docs/samples.md
  • docs/service/client-sdk/tanstack-query/index.md
  • docs/service/index.md
  • docs/service/server-adapter.md
  • docs/utilities/open-api.md
  • src/lib/prism-zmodel.js
💤 Files with no reviewable changes (1)
  • docs/service/index.md
✅ Files skipped from review due to trivial changes (16)
  • docs/orm/errors.md
  • docs/orm/api/count.md
  • docs/orm/api/create.md
  • docs/orm/client.md
  • docs/orm/api/_select-include-omit.md
  • docs/orm/api/transaction.md
  • code-repos/zenstackhq/v3-doc-plugin
  • docs/reference/zmodel/data-field.md
  • docs/reference/zmodel/type.md
  • docs/orm/query-builder.md
  • docs/reference/zmodel/plugin.md
  • docs/reference/zmodel/input-validation.md
  • code-repos/zenstackhq/v3-doc-orm-computed-fields
  • docs/reference/zmodel/function.md
  • docs/modeling/relation.md
  • docs/orm/cli.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/modeling/plugin.md
🧰 Additional context used
🪛 LanguageTool
docs/orm/api/update.md

[style] ~44-~44: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ... The update and upsert methods are very powerful in that they allow you to freely manipu...

(EN_WEAK_ADJECTIVE)

docs/samples.md

[grammar] ~22-~22: Ensure spelling is correct
Context: ...s, TanStack Query, and ZenStack v3. ## Rallly https://github.com/zenstackhq/rallly [R...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

docs/reference/cli.md

[grammar] ~56-~56: Use a hyphen to join words.
Context: ...# migrate Run database schema migration related tasks. ```bash Usage: zen migra...

(QB_NEW_EN_HYPHEN)

docs/orm/api/filter.md

[style] ~107-~107: This sentence may be long and difficult for your reader to follow. Consider inserting a period and starting a new sentence here.
Context: ... Json](../../modeling/typed-json) fields, with their structure well defined in the schema, allow for a more conveni...

(WITH_THE_SENTENCE)

docs/modeling/view.md

[style] ~12-~12: The phrase ‘pretty much’ can be informal. To strengthen your writing, consider removing it or replacing it with an adverb.
Context: ...define a SQL view. Defining a view is pretty much the same as defining a model, with th...

(PRETTY_MUCH)

docs/orm/index.md

[style] ~113-~113: Consider using a more formal and expressive alternative to ‘awesome’.
Context: ...ntainers](https://webcontainers.io/) is an awesome technology that allows you to run a Nod...

(AWESOME)


[style] ~114-~114: Consider using a less common alternative to make your writing sound more unique and professional.
Context: ...ch is not suitable for production use. Feel free to make changes and try things out in the ...

(FEEL_FREE_TO_STYLE_ME)

docs/orm/plugins/index.md

[style] ~37-~37: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ... before it's sent to the database. It's a very powerful low-level extensibility that should be ...

(EN_WEAK_ADJECTIVE)

🪛 markdownlint-cli2 (0.18.1)
docs/samples.md

25-25: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

docs/reference/plugins/policy.md

49-49: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


57-57: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


65-65: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


73-73: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


81-81: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


89-89: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


97-97: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


114-114: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


142-142: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)

docs/reference/zmodel/view.md

9-9: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)

🔇 Additional comments (54)
docs/utilities/open-api.md (1)

1-8: Placeholder documentation with no functional content.

This file is a stub marked as "Coming soon" with no substantive documentation. While this may be intentional as a placeholder during the documentation restructuring, clarify when this content is expected to be completed and whether this page should be published or hidden until the documentation is ready.

docs/reference/zmodel/import.md (1)

2-2: Verify sidebar ordering in the v3 GA documentation restructuring.

The sidebar_position change from 9 to 10 is metadata-only and appears to be part of the broader documentation reorganization. Ensure that this new position aligns with the intended navigation structure for the v3 GA release.

Can you confirm that the sidebar ordering of the reference/zmodel documents is correct after this change? If other documents in this section also had their positions adjusted, verifying the full ordering would help ensure the documentation hierarchy is as intended.

docs/recipe/databases/neon.md (1)

9-9: LGTM!

The hyperlink addition for Neon aligns well with the PR's broader effort to update external references. The link destination is correct.

docs/orm/api/update.md (1)

44-44: LGTM! The transactional guarantee statement adds important clarity.

This addition aligns well with similar documentation in docs/orm/api/create.md and helps users understand atomicity guarantees when manipulating nested relations. The placement is logical and the content is accurate.

docs/modeling/attribute.md (1)

33-59: ✓ Documentation update is clear and well-structured.

The reworked examples effectively demonstrate three complementary ways to use the @@index attribute—from basic positional syntax through to fully named parameters. The progression from model A (simplest) to model C (most explicit) provides good pedagogical value.

The examples are consistent with the attribute definition on line 36 and correctly illustrate how positional parameters (the underscore-prefixed fields) can be passed implicitly or explicitly.

One minor observation: the map parameter declared in the attribute definition is not demonstrated in any of the three examples. If it's an important option for users (e.g., for custom database index naming), consider adding a fourth example or a note explaining its purpose—otherwise, the current coverage is appropriate for an introductory section.

docs/modeling/polymorphism.md (1)

2-2: Verify sidebar_position reordering.

The sidebar position has been changed to 11. Confirm this is intentional and does not conflict with the position ordering of other documents in the modeling section.

docs/_components/ZModelVsPSL.tsx (1)

10-10: LGTM! Clean styling update.

The change from type="info" to type="note" appropriately updates the visual presentation of the admonition. Both are valid Docusaurus Admonition types, and this aligns with the documentation restructuring objectives.

docs/_components/ZenStackVsPrisma.tsx (1)

10-10: LGTM! Presentational alignment.

The change from type="info" to type="note" is a straightforward presentational update that aligns with the broader documentation UI consistency effort described in the PR summary.

docs/orm/benchmark.md (2)

44-44: Clear benchmark environment specification.

The update to specify "US west" origin and Neon's "us-east-1" region provides helpful geographic context for interpreting latency-sensitive results.


61-62: Well-placed acknowledgment of future optimization opportunity.

The note appropriately signals commitment to addressing the cold start overhead without making specific promises or timelines, maintaining consistency with similar forward-looking statements elsewhere in the document.

docs/service/client-sdk/tanstack-query/index.md (2)

14-14: Title clarification is more descriptive.

Renaming from "TanStack Query" to "TanStack Query Client" better specifies this document covers the client-side SDK integration.


42-42: Stable package confirmed on npm.

The @zenstackhq/tanstack-query package is published on npm without the @next suffix (latest version 2.18.1). The removal of the pre-release tag aligns with the v3 GA release, and all documentation examples consistently reference the stable package.

docs/reference/server-adapters/nuxt.mdx (1)

24-37: Code example looks good, consistent with the new client-based auth pattern.

The mounting example correctly demonstrates the RPCApiHandler initialization with schema and the getClient pattern using client.$setAuth(). The inline comment helpfully clarifies that getSessionUser implementation depends on the auth solution.

docs/reference/server-adapters/sveltekit.mdx (1)

31-37: Mounting example is clear and consistent with the updated pattern.

The example correctly demonstrates the SvelteKitHandler with prefix, apiHandler, and getClient options. The inline comment about getSessionUser is helpful.

docs/reference/server-adapters/next.mdx (2)

72-77: Pages Router example is well-structured.

The Pages Router variant correctly shows the different request/response types (NextApiRequest, NextApiResponse) and the appropriate getClient signature. Good that useAppDir is omitted here since it defaults to false for Pages Router.


88-108: Middleware example is a valuable addition.

This section provides a practical example for controlling endpoint exposure using Next.js middleware. The regex pattern and response handling are correct.

docs/reference/zmodel/expression.md (1)

2-2: Sidebar position update approved.

The reordering of the sidebar position is a straightforward organizational change with no impact on content or functionality.

docs/modeling/mixin.md (1)

58-58: Wording clarification approved.

Removing "conceptually" makes the statement more direct and better reflects the actual inlining behavior. No loss of clarity or precision.

docs/orm/api/json-null.md (1)

1-47: Comprehensive JSON null handling documentation.

This new documentation clearly explains the distinction between database NULL and JSON null, provides practical code examples for both creating/updating and filtering, and sets correct expectations about query results. Well-organized and helpful for users working with JSON fields.

docs/orm/access-control/write-policies.md (1)

15-15: Package installation correctly updated for GA.

Removal of the @next tag reflects the v3 GA release status. All other improvements (expanded operators documentation, clearer examples, link updates) strengthen the documentation.

docs/orm/access-control/query.md (2)

29-33: Immutability info added appropriately.

The new info box clarifying that $use() and $setAuth() return new instances is helpful and prevents confusion about instance lifecycle. Clear explanation of shallow cloning performance characteristics is valuable.


76-86: Error terminology standardized and explained.

The update to ORMError with reason codes provides consistency with the v3 error model. The explanations for NOT_FOUND vs REJECTED_BY_POLICY help users understand the semantic difference and choose appropriate error handling strategies.

docs/reference/cli.md (3)

11-31: CLI branding and usage updated for v3 GA.

The migration from zenstack to zen command prefix, updated branding text, and refined option formatting align with the new v3 GA identity. Clear and consistent presentation.


35-52: Comprehensive subcommand documentation.

The expanded documentation for generate, migrate (with dev/reset/deploy/status/resolve subcommands), and new db (push/seed) section provides clear guidance for all major CLI operations. Each command includes usage blocks, options, and appropriate warnings (e.g., :::danger for reset). Organization is logical and easy to navigate.

Also applies to: 54-73, 75-168, 170-225


289-313: New configuration guidance section added.

The "Overriding Default Options" section clarifies how users can customize schema location and output directory via package.json configuration. Clear examples make this easy to follow.

docs/reference/zmodel/attribute.md (1)

2-2: Sidebar position update approved.

The reordering of the sidebar position is a straightforward organizational change coordinated with other reference docs. No impact on content or functionality.

docs/orm/api/find.md (1)

39-39: LGTM!

Changing "section" to "document" accurately reflects that filter.md is a separate documentation file, improving clarity without changing meaning.

docs/recipe/plugin-dev.md (2)

8-8: PreviewFeature component dependency.

Ensure the PreviewFeature component is available at the imported path (see entity-mutation-hooks.md review for verification).

Also applies to: 12-12


69-69: LGTM!

Removing the @next tag from the SDK dependency is appropriate for v3 GA. This signals that the package is now stable and available as a production release.

docs/orm/plugins/query-api-hooks.md (1)

6-10: LGTM – component dependency.

PreviewFeature additions are consistent with other plugin docs. Ensure the component is available (see entity-mutation-hooks.md for verification approach).

docs/orm/access-control/index.md (1)

20-20: LGTM!

Minor wording improvements that enhance precision: "database-type agnostic" clarifies that ZenStack works across different database systems, and "database schema migrations" disambiguates from other schema types. These changes improve technical clarity without altering meaning.

docs/orm/access-control/post-update.md (2)

19-19: LGTM!

Adding backticks around the true literal improves code readability and makes the boolean value stand out as a literal rather than plain text.


41-41: The error handling documentation is correct. The errors.md file confirms that ORMError with reason set to 'rejected-by-policy' (corresponding to ORMErrorReason.REJECTED_BY_POLICY) is the appropriate error for policy rejection scenarios. The post-update.md documentation accurately reflects this API.

docs/orm/plugins/kysely-query-hooks.md (3)

6-10: LGTM – component dependency.

PreviewFeature additions are consistent with other plugin docs. Ensure the component is available (see entity-mutation-hooks.md for verification approach).


16-16: LGTM!

Capitalizing "Access Control" to refer to the proper feature name improves clarity and consistency with documentation naming conventions.


28-28: LGTM!

The update from QueryNode to OperationNode correctly reflects Kysely's API terminology. The Kysely Plugin System documentation link provides valuable context for understanding OperationNode processing, and the note about future helpers sets appropriate expectations for additional developer support.

docs/orm/index.md (1)

100-102: LGTM! Improved terminology.

The change from "flexible" to "extensible" is more precise and better describes ZenStack v3's plugin system capabilities.

docs/orm/plugins/index.md (1)

7-12: LGTM! Proper preview feature indication.

The PreviewFeature component is correctly imported and used to clearly mark the plugin feature as preview status.

docs/orm/migration.md (2)

24-24: LGTM! Improved navigation.

Linking directly to the migrate section improves user experience by taking readers straight to the relevant commands.


34-35: LGTM! Helpful workaround guidance.

This provides clear instructions for handling unsupported features like views, aligning with the broader v3 documentation.

docs/reference/plugins/policy.md (1)

140-150: LGTM! Useful delegation feature.

The new check() function provides a clean way to delegate access control decisions to related entities.

src/lib/prism-zmodel.js (1)

3-4: LGTM! Appropriate keyword expansion.

Adding function, true, false, and null as keywords properly supports the evolved ZModel language syntax, including the new function declarations and literal values.

docs/orm/api/index.md (4)

15-15: LGTM! Improved clarity.

The expanded description with examples better explains where the where clause is used.


41-45: LGTM! Important clarification.

This info block clearly explains the mutual exclusions between include/select and select/omit, preventing user confusion.


49-49: LGTM! Helpful pagination detail.

Noting that take supports negative values for backward pagination is a useful detail for developers implementing pagination.


78-80: LGTM! Correct type demonstration.

Removing await correctly demonstrates that the return type is Promise<{...}[]>, which aligns with the comment on line 77 and the "Output Types" section context.

docs/orm/api/filter.md (2)

77-77: Improvements to clarity and terminology are solid.

The updates to link "JSON Path" (line 77), rename to "Strongly Typed Json" with a modeling guide link (line 107), and the grammar fix "reach down to" (line 129) all improve clarity and consistency. These changes align well with the broader v3 GA documentation overhaul.

Also applies to: 107-107, 129-129


8-8: No issues found. The PreviewFeature component is correctly defined in docs/_components/PreviewFeature.tsx, properly exported as a default export, and correctly used at line 67 with the name prop passed as expected.

docs/orm/validation.md (2)

16-16: Clearer validation scope documentation.

The updated description at line 16 now explicitly states that validation applies to "ORM APIs like create, update, etc." and is "not enforced with the query builder APIs," which is more specific and helpful than the original phrasing.


25-25: The ORMError API change with reason set to INVALID_INPUT is properly documented and consistently applied throughout the codebase. The errors guide (docs/orm/errors.md) documents the ORMErrorReason enum with INVALID_INPUT as a valid reason, and no orphaned InputValidationError references remain in the documentation. The statement in validation.md is accurate.

docs/orm/quick-start.md (3)

48-48: Successful transition to v3 GA stable versions.

The removal of @next tags across package references and CLI commands (lines 21, 32, 48) correctly reflects the v3 GA stabilization. The reordering of setup steps and the addition of the interactive playground option (line 24) improve the user onboarding experience.

Also applies to: 21-64


26-26: StackBlitzGithub repository reference is valid.

The repository zenstackhq/v3-doc-quick-start exists and is properly configured for StackBlitz. Both files referenced in the openFile parameter exist: main.ts (in root) and zenstack/schema.zmodel (in the zenstack directory). The repository includes a .stackblitzrc configuration file, confirming proper StackBlitz setup.


21-21: "zen" command is correctly positioned as the primary CLI interface.

The quick-start guide appropriately uses npm create zenstack my-project (line 21) and the zen CLI command (lines 32, 38, 40, 58) throughout. The CLI documentation confirms both zen and zenstack commands are equivalent, making zen the natural choice for a quick-start guide due to its conciseness. Package references correctly target @zenstackhq/cli without the @next suffix.

docs/orm/computed-fields.md (1)

53-53: No issues found. The documentation consistently shows the correct import path (@zenstackhq/orm/helpers) and sql.ref API usage (single template string argument). There is only one example of sql.ref in the documentation, and it is properly documented.

@ymc9 ymc9 merged commit 79a4362 into main Dec 24, 2025
4 checks passed
@ymc9 ymc9 deleted the doc/v3-ga branch December 24, 2025 09:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants