-
-
Notifications
You must be signed in to change notification settings - Fork 38
doc: v3 GA #531
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
doc: v3 GA #531
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
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 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. 📒 Files selected for processing (2)
WalkthroughMass documentation restructuring: updated many internal links to /docs/2.x/, removed Changes
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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Pre-merge checks and finishing touches❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
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. Comment |
There was a problem hiding this 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 unusedgetCurrentUserfunction stub.This function is not used in the example—the code uses
getSessionUserimported 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
⛔ Files ignored due to path filters (32)
docs/modeling/_category_.ymlis excluded by!**/*.ymldocs/orm/_category_.ymlis excluded by!**/*.ymldocs/orm/plugins/_category_.ymlis excluded by!**/*.ymldocs/recipe/_category_.ymlis excluded by!**/*.ymldocs/recipe/auth-integration/_category_.ymlis excluded by!**/*.ymldocs/recipe/databases/_category_.ymlis excluded by!**/*.ymldocs/reference/_category_.ymlis excluded by!**/*.ymldocs/reference/plugins/_category_.ymlis excluded by!**/*.ymldocs/reference/zmodel/_category_.ymlis excluded by!**/*.ymldocs/service/_category_.ymlis excluded by!**/*.ymldocs/service/api-handler/_category_.ymlis excluded by!**/*.ymldocs/service/client-sdk/_category_.ymlis excluded by!**/*.ymldocs/service/client-sdk/tanstack-query/_category_.ymlis excluded by!**/*.ymldocs/utilities/_category_.ymlis excluded by!**/*.ymldocs/vscode.pngis excluded by!**/*.png,!**/*.pngvercel.jsonis excluded by!**/*.jsonversioned_docs/version-1.x/assets/todo-app-erd.svgis excluded by!**/*.svg,!**/*.svgversioned_docs/version-1.x/assets/todo-app-openapi.pngis excluded by!**/*.png,!**/*.pngversioned_docs/version-1.x/assets/todo-app-splash.pngis excluded by!**/*.png,!**/*.pngversioned_docs/version-1.x/guides/_category_.ymlis excluded by!**/*.ymlversioned_docs/version-1.x/guides/authentication/_category_.ymlis excluded by!**/*.ymlversioned_docs/version-1.x/quick-start/_category_.ymlis excluded by!**/*.ymlversioned_docs/version-1.x/reference/server-adapters/_category_.ymlis excluded by!**/*.ymlversioned_docs/version-1.x/the-complete-guide/part4/list-mgmt.pngis excluded by!**/*.png,!**/*.pngversioned_docs/version-1.x/the-complete-guide/part4/signup-ui.gifis excluded by!**/*.gif,!**/*.gifversioned_docs/version-1.x/the-complete-guide/part4/space-mgmt.pngis excluded by!**/*.png,!**/*.pngversioned_docs/version-1.x/the-complete-guide/part4/todo-mgmt-non-optimistic.gifis excluded by!**/*.gif,!**/*.gifversioned_docs/version-1.x/the-complete-guide/part4/todo-mgmt-optimistic.gifis excluded by!**/*.gif,!**/*.gifversioned_docs/version-2.x/assets/todo-app-erd.svgis excluded by!**/*.svg,!**/*.svgversioned_docs/version-2.x/assets/todo-app-openapi.pngis excluded by!**/*.png,!**/*.pngversioned_docs/version-2.x/assets/todo-app-splash.pngis excluded by!**/*.png,!**/*.pngversioned_docs/version-2.x/guides/_category_.ymlis 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
@nexttag appropriately reflects the transition to a stable v3 GA release. Users will now install the stable@zenstackhq/plugin-policypackage, which is correct.docs/recipe/plugin-dev.md (1)
64-66: ✓ Package version update aligns with v3 GA.The transition from
@zenstackhq/sdk@nextto the stable@zenstackhq/sdkrelease 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
@nexttags 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/part2exists 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:
- 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.
- The Options section captures all configurable parameters for the
@core/prismaplugin. Isoutputthe 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
zenstacktozeninvocation 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/serviceto/docs/service, and/docs/3.x/migrate-prismato/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
@nexttags to stable@zenstackhq/ormand@zenstackhq/clipackages 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
@computedannotation on thefullNamefield 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 generatecommand, which aligns with the PR's broader migration from thezenstackCLI tozen.
61-61: The relative documentation link is valid.The relative path
../../orm/access-control/correctly resolves to the existing access-control documentation directory atdocs/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-authdirectly (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
@nexttag 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) theversioned_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.mdand the relative path reference./recipe/nestjsin 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/referenceThese 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
/docsinstead 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
AccessControlPluginusage, 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/welcometo/docsimproves 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-adaptertarget.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
getClienttype 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
RPCApiHandlerand thegetClientcallback 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-adaptersto../server-adaptercorrectly points to the existingdocs/service/server-adapter.mdfile.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
RPCApiHandlerand thegetClientcallback 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
prefixoption. ThegetClientcallback correctly receivesFastifyRequestandFastifyReplyparameters.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) => ...withuseAppDir: 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/glossaryin the path, but Neon's glossary is located at/docs/reference/glossarywithout version segments. Neon documentation is published at https://neon.tech/docs, and the current URL structure does not use2.xversioning. Update the link tohttps://neon.tech/docs/reference/glossary#scale-to-zeroto point to the correct, existing documentation page.Likely an incorrect or invalid review comment.
There was a problem hiding this 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
DbServiceby extending theZenStackClientconstructor," but the code extends the class itself, not the constructor. Consider rephrasing to "extending theZenStackClientclass."
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 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
ClientOptionssecond generic parameter fromZenStackClient<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/apiis 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.
There was a problem hiding this 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: Addrel="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 accesswindow.openerand 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: Addrel="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 accesswindow.openerand 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
⛔ Files ignored due to path filters (1)
static/img/logo/suhyl.pngis excluded by!**/*.png,!**/*.png
📒 Files selected for processing (4)
src/components/Sponsorship.tsxsrc/pages/_components/ORM.tsxsrc/pages/_components/Service.tsxsrc/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.
There was a problem hiding this 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 withtarget="_blank"andrel="noopener noreferrer"for external sponsor link.The GitHub sponsors link uses the
Linkcomponent withouttarget="_blank"orrelattributes, 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
📒 Files selected for processing (11)
docs/index.mddocs/modeling/attribute.mddocs/modeling/enum.mddocs/modeling/mixin.mddocs/modeling/multi-file.mddocs/modeling/plugin.mddocs/modeling/typed-json.mddocs/modeling/view.mddocs/orm/migration.mddocs/prerequisite.mdsrc/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-onlyor manual DDL). The back-reference to the migration documentation correctly anchors users to the detailedmigrate devsection, 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"alongsidetarget="_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.
There was a problem hiding this 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 ofClientContract<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 thesrc/libdirectory, 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: trueoption 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
childrenis 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
📒 Files selected for processing (63)
code-repos/zenstackhq/v3-doc-orm-computed-fieldscode-repos/zenstackhq/v3-doc-plugindocs/_components/PreviewFeature.tsxdocs/_components/ZModelVsPSL.tsxdocs/_components/ZenStackVsPrisma.tsxdocs/modeling/attribute.mddocs/modeling/conclusion.mddocs/modeling/mixin.mddocs/modeling/plugin.mddocs/modeling/polymorphism.mddocs/modeling/relation.mddocs/modeling/typed-json.mddocs/modeling/view.mddocs/orm/access-control/index.mddocs/orm/access-control/post-update.mddocs/orm/access-control/query.mddocs/orm/access-control/write-policies.mddocs/orm/api/_select-include-omit.mddocs/orm/api/count.mddocs/orm/api/create.mddocs/orm/api/filter.mddocs/orm/api/find.mddocs/orm/api/index.mddocs/orm/api/json-null.mddocs/orm/api/transaction.mddocs/orm/api/update.mddocs/orm/benchmark.mddocs/orm/cli.mddocs/orm/client.mddocs/orm/computed-fields.mddocs/orm/errors.mddocs/orm/index.mddocs/orm/inferred-types.mddocs/orm/migration.mddocs/orm/plugins/entity-mutation-hooks.mddocs/orm/plugins/index.mddocs/orm/plugins/kysely-query-hooks.mddocs/orm/plugins/query-api-hooks.mddocs/orm/query-builder.mddocs/orm/quick-start.mddocs/orm/validation.mddocs/recipe/databases/neon.mddocs/recipe/plugin-dev.mddocs/reference/cli.mddocs/reference/plugins/policy.mddocs/reference/server-adapters/next.mdxdocs/reference/server-adapters/nuxt.mdxdocs/reference/server-adapters/sveltekit.mdxdocs/reference/zmodel/attribute.mddocs/reference/zmodel/data-field.mddocs/reference/zmodel/expression.mddocs/reference/zmodel/function.mddocs/reference/zmodel/import.mddocs/reference/zmodel/input-validation.mddocs/reference/zmodel/plugin.mddocs/reference/zmodel/type.mddocs/reference/zmodel/view.mddocs/samples.mddocs/service/client-sdk/tanstack-query/index.mddocs/service/index.mddocs/service/server-adapter.mddocs/utilities/open-api.mdsrc/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_positionchange 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.mdand 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
@@indexattribute—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
mapparameter 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"totype="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"totype="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-querypackage is published on npm without the@nextsuffix (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 thatgetSessionUserimplementation 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, andgetClientoptions. The inline comment aboutgetSessionUseris 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 thatuseAppDiris 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
@nexttag 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
ORMErrorwithreasoncodes provides consistency with the v3 error model. The explanations forNOT_FOUNDvsREJECTED_BY_POLICYhelp 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
zenstacktozencommand 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 newdb(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.jsonconfiguration. 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.mdis 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
@nexttag 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
trueliteral 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 thatORMErrorwithreasonset to'rejected-by-policy'(corresponding toORMErrorReason.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, andnullas 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
whereclause is used.
41-45: LGTM! Important clarification.This info block clearly explains the mutual exclusions between
include/selectandselect/omit, preventing user confusion.
49-49: LGTM! Helpful pagination detail.Noting that
takesupports negative values for backward pagination is a useful detail for developers implementing pagination.
78-80: LGTM! Correct type demonstration.Removing
awaitcorrectly demonstrates that the return type isPromise<{...}[]>, 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 indocs/_components/PreviewFeature.tsx, properly exported as a default export, and correctly used at line 67 with thenameprop 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 withreasonset toINVALID_INPUTis properly documented and consistently applied throughout the codebase. The errors guide (docs/orm/errors.md) documents theORMErrorReasonenum withINVALID_INPUTas a valid reason, and no orphanedInputValidationErrorreferences 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
@nexttags 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-startexists and is properly configured for StackBlitz. Both files referenced in theopenFileparameter exist:main.ts(in root) andzenstack/schema.zmodel(in the zenstack directory). The repository includes a.stackblitzrcconfiguration 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 thezenCLI command (lines 32, 38, 40, 58) throughout. The CLI documentation confirms bothzenandzenstackcommands are equivalent, makingzenthe natural choice for a quick-start guide due to its conciseness. Package references correctly target@zenstackhq/cliwithout the@nextsuffix.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.
Summary by CodeRabbit
New Features
Documentation
Chores
✏️ Tip: You can customize this high-level summary in your review settings.