Add Appwrite React library docs and launch post#3022
Conversation
Adds /docs/products/auth/react hub covering the provider, hooks, server helpers, handler routes, and OAuth flow. Rewrites the React, Next.js, and TanStack Start quickstarts to use @appwrite.io/react. Adds a launch blog post under blog/post/announcing-appwrite-react-library and a new "React library" entry in the Auth sidebar. Updates /docs/sdks to list the package.
Appwrite WebsiteProject ID: Website (appwrite/website)Project ID: Tip Our Discord community has grown to 24K developers, and counting |
Greptile SummaryThis PR ships the Appwrite React library documentation: a new
Confidence Score: 5/5Documentation-only change; no application logic is modified, making this safe to merge. The change is entirely documentation and static content. Code examples are consistent across the reference page, three quickstarts, and the blog post. Previously raised concerns have been addressed in this iteration. No files require special attention. Important Files Changed
Reviews (10): Last reviewed commit: "Trim blog FAQs to generic auth-library q..." | Re-trigger Greptile |
Rewrites the AI quickstart prompts under react/, nextjs/, and tanstack-start/ to use @appwrite.io/react instead of the raw Appwrite Web SDK setup, mirroring the rewritten +page.markdoc files.
- Fix admin client example: call admin.account.list() instead of dereferencing the Account service - Add multi-route guidance to the TanStack Start quickstart so readers know to move AppwriteProvider into __root.tsx in real apps - Wrap the blog useAuth() snippet in a function component to satisfy the Rules of Hooks - Format prompt.md files per prettier
Reflects the new framework helper method that returns the full node-appwrite AdminServer (users, databases, storage, teams, and the rest). Hub keeps the standalone createAdminClient as an alternative.
| title: "Announcing the Appwrite React library" | ||
| description: A small set of React hooks and SSR adapters that take the busywork out of wiring Appwrite Auth into Vite, Next.js, and TanStack Start apps. | ||
| date: 2026-05-25 | ||
| cover: /images/blog/announcing-appwrite-react-library/cover.avif |
There was a problem hiding this comment.
Blog post cover image is missing from the repository
The frontmatter references /images/blog/announcing-appwrite-react-library/cover.avif, but the directory static/images/blog/announcing-appwrite-react-library/ does not exist anywhere in the repo. Every other blog post in static/images/blog/ has its cover image committed alongside the post. Publishing this as-is will render a broken image on the blog listing and the post page itself.
Sets the announcement blog cover to the new React SDK artwork (date moved to 2026-06-24), adds the matching 2026-06-24 changelog entry, and tags the React library row in /docs/sdks as beta to align with the React Native SDK row.
| layout: post | ||
| title: "Announcing the Appwrite React library" | ||
| description: A small set of React hooks and SSR adapters that take the busywork out of wiring Appwrite Auth into Vite, Next.js, and TanStack Start apps. | ||
| date: 2026-06-24 |
| timeToRead: 5 | ||
| author: atharva | ||
| category: announcement, authentication | ||
| faqs: |
There was a problem hiding this comment.
Let's add a few more generic FAQs
| const { user, isLoading, error, refresh } = useUser(); | ||
| ``` | ||
|
|
||
| Returns: |
There was a problem hiding this comment.
These don't look great. Maybe we should use subheadings? And maybe even update the copy?
| | `scopes` | No | Provider-specific OAuth scopes to request. | | ||
| | `onError` | No | Callback invoked if the request fails before redirect. | | ||
|
|
||
| In SSR mode the success URL is fixed to the handler callback. The final redirect after that callback is controlled by the `redirects.success` config on the handler. |
There was a problem hiding this comment.
| In SSR mode the success URL is fixed to the handler callback. The final redirect after that callback is controlled by the `redirects.success` config on the handler. | |
| In SSR mode, the success URL is fixed to the handler callback. The final redirect after that callback is controlled by the `redirects.success` config on the handler. |
Do a general grammar check as well please?
|
|
||
| ## Session client {% #session-client %} | ||
|
|
||
| For per-request operations scoped to the current user (reading their data, calling APIs on their behalf) call `createSessionClient` from the framework helper. It returns a `node-appwrite` client already authenticated with the session cookie, ready to use in server components, loaders, and server functions. |
There was a problem hiding this comment.
| For per-request operations scoped to the current user (reading their data, calling APIs on their behalf) call `createSessionClient` from the framework helper. It returns a `node-appwrite` client already authenticated with the session cookie, ready to use in server components, loaders, and server functions. | |
| For per-request operations scoped to the current user (reading their data, calling APIs on their behalf), call `createSessionClient` from the framework helper. It returns a `node-appwrite` client already authenticated with the session cookie, ready to use in server components, loaders, and server functions. |
| ## Next.js {% #handler-next %} | ||
|
|
||
| ```ts | ||
| // app/api/appwrite/[...appwrite]/route.ts | ||
| import { createAppwriteHandlers } from "@appwrite.io/react/handlers/next"; | ||
|
|
||
| export const { GET, POST } = createAppwriteHandlers({ | ||
| endpoint: process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT!, | ||
| projectId: process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID!, | ||
| apiKey: process.env.APPWRITE_API_KEY!, | ||
| basePath: "/api/appwrite", | ||
| }); | ||
| ``` | ||
|
|
||
| ## TanStack Start {% #handler-tanstack %} | ||
|
|
||
| ```ts | ||
| // src/routes/api/appwrite/$.ts | ||
| import { createFileRoute } from "@tanstack/react-router"; | ||
| import { createAppwriteHandlers } from "@appwrite.io/react/handlers/tanstack"; | ||
|
|
||
| export const Route = createFileRoute("/api/appwrite/$")({ | ||
| server: { | ||
| handlers: createAppwriteHandlers({ | ||
| endpoint: import.meta.env.VITE_APPWRITE_ENDPOINT, | ||
| projectId: import.meta.env.VITE_APPWRITE_PROJECT_ID, | ||
| apiKey: process.env.APPWRITE_API_KEY!, | ||
| basePath: "/api/appwrite", | ||
| }), | ||
| }, | ||
| }); | ||
| ``` |
There was a problem hiding this comment.
We should use tabs for such examples
There was a problem hiding this comment.
Also, should we add React Router and maybe even Astro (since you can use React components there)?
There was a problem hiding this comment.
The library only supports Next and TanStack Start for SSR for now.
Bump blog and changelog date to 2026-06-26, add four generic FAQs
(beta status, React Native, cookie/redirect customization, magic URL/phone).
Restructure hooks reference: drop bare "Returns:" labels, add one-line
intros, split sign-in/up/out parameter tables into ### sub-headings.
Wrap Next.js and TanStack Start handler examples in {% tabs %}.
Grammar pass: add missing commas in provider, OAuth, session and
admin client copy.
Drop the beta/production-ready FAQ. Add three generic FAQs in its place: open source repo + license, TypeScript support, where to report bugs or request features.
Wrap the per-method parameter blocks for emailPassword and oAuth in
{% tabs %} so readers see one method at a time instead of stacked
sub-sections.
adityaoberai
left a comment
There was a problem hiding this comment.
Approving to unblock
Drop the FAQs that were specific to the library's design or roadmap. Keep version support, open source, supported auth methods, and where to start. Add two generic FAQs explaining what an authentication library is and why teams reach for one.


Adds the /docs/products/auth/react hub, rewrites the React, Next.js, and TanStack Start quickstarts to use @appwrite.io/react, and ships an announcement post under blog/post/announcing-appwrite-react-library.
Also updates /docs/sdks and adds a "React library" entry to the Auth sidebar.